Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL एकाधिक तालिकाओं को क्वेरी कर रहा है

ठीक है, इसलिए जब मैं इस बात से सहमत हूं कि आपको कुछ पोकिंग करना चाहिए और बाएं जुड़ने के बारे में और जानना चाहिए, तो इस प्रश्न का सही उत्तर देने के लिए कुछ मुश्किल भी है जो शुरुआत में खो सकता है। मैं आगे बढ़ूंगा और इसका उत्तर देने में आपकी सहायता करूंगा, लेकिन मैं जुड़ने के बारे में अधिक जानने की सलाह दूंगा।

मेरी सटीक क्वेरी उपलब्ध सूचकांकों पर निर्भर करेगी, लेकिन इसकी संभावना कुछ इस तरह है:

SELECT a.* 
FROM products AS a
LEFT JOIN (
SELECT product_id FROM order_products as b 
INNER JOIN orders AS c
ON b.order_id = c.order_id
WHERE c.date_ordered >= date_sub(c.date_ordered, INTERVAL 7 day)
GROUP BY product_id 
) AS d
ON a.product_id = d.product_id 
WHERE d.product_id IS NULL

मैं जो कर रहा हूं वह यह है कि मैं एक सबक्वायरी लिख रहा हूं जो ऑर्डर और ऑर्डर उत्पादों को एक साथ जोड़ता है, जहां date_ordered एक निश्चित तिथि सीमा के भीतर आता है (मैं यहां date_sub फ़ंक्शन के बारे में सीखने की अनुशंसा करता हूं:http://www.w3schools.com/sql/func_date_sub.asp और कुछ त्वरित SELECT date_sub(date_ordered, INTERVAL X DAY) ऑर्डर क्वेरी से यह सुनिश्चित करने के लिए कि आप समझते हैं कि यह गणना कैसे काम करती है, व्यवहार में।

अब, मुझे पिछले एक्स दिनों (उपरोक्त क्वेरी में 7) के ऑर्डर की मेरी सूची मिलती है और मैं ऑर्डर किए गए उत्पादों को प्राप्त करने के लिए ऑर्डर उत्पाद तालिका के साथ जुड़ता हूं। यहां, मैं मूल रूप से अपने उत्पादों को काटना चाहता हूं। Product_id =300 को 70 बार ऑर्डर किया जा सकता है। Product_id =200 को 50 बार ऑर्डर किया जा सकता है। जो भी मामला हो, मैं उत्पाद आईडी 300 और 200 के लिए अपनी उत्पाद तालिका में 70 रिकॉर्ड और 50 रिकॉर्ड में शामिल नहीं होना चाहता, इसलिए मैंने उन्हें काट दिया। वह अंतिम ग्रुप बाय स्टेटमेंट ऐसा करता है। यह कार्यात्मक रूप से DISTINCT लिखने जैसा ही है (हालाँकि कुछ परिस्थितियों में इनकी गणना कैसे की जाती है, इसमें मामूली अंतर हो सकता है, इनमें से कोई भी परिस्थिति यहाँ लागू नहीं होती है... DISTINCT का उपयोग करें यदि यह आपके लिए स्पष्ट है)

एक बार जब मेरे पास पिछले एक्स दिनों में ऑर्डर किए गए अद्वितीय उत्पाद आईडी की मेरी सूची है, तो मैं उसमें अपनी उत्पाद तालिका के साथ जुड़ जाता हूं। यहां, मैं बाएं शामिल होने का उपयोग करता हूं। ऊपर दी गई टिप्पणियों की तरह, आप बहुत सावधानी से जुड़ने की धारणा को देखना चाहेंगे। ऐसा करें, अगर आपने पहले से नहीं किया है।

अंत में, मैं एक WHERE फ़िल्टर लागू करता हूँ जो कहता है कि "WHERE d.product_id IS NULL है।" यह जो कर रहा है वह कह रहा है, "ठीक है, अगर product_id =Y को पिछले X दिनों में ऑर्डर किया गया था, तो यह a.product_id =d.product_id के साथ सफलतापूर्वक मेरी उत्पाद तालिका में शामिल हो जाएगा। अगर इसे ऑर्डर नहीं किया गया था, तो a. मेरे परिणाम सेट में product_id मौजूद रहेगा, लेकिन d.product_id नहीं होगा। यानी, d.product_id शून्य हो जाएगा।"

वह आखिरी मोड़ वह हिस्सा हो सकता है जो स्पष्ट / बाहर खड़ा नहीं है।

उम्मीद है ये मदद करेगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लेखन त्रुटि:शून्य एक प्रतीक नहीं है

  2. PHP कैशिंग का सबसे अच्छा तरीका

  3. डेटाबेस तालिका से चुनिंदा ड्रॉप डाउन पॉप्युलेट करें

  4. MySQL स्टोर संबंध (परिवार) ट्री

  5. आप प्रत्येक क्वेरी पर पुन:कनेक्ट किए बिना PHP में MySQL से कुशलतापूर्वक कैसे कनेक्ट होते हैं?