2010-01-15 17 views
10

मैं दो mysql टेबल है - एक बिक्री तालिका:पर अलग रिकॉर्ड का चयन एक में शामिल होने के

+----------------+------------------------------+------+-----+---------+-------+ 
| Field   | Type       | Null | Key | Default | Extra | 
+----------------+------------------------------+------+-----+---------+-------+ 
| StoreId  | bigint(20) unsigned   | NO | PRI | NULL |  | 
| ItemId   | bigint(20) unsigned   | NO |  | NULL |  | 
| SaleWeek  | int(10) unsigned    | NO | PRI | NULL |  | 
+----------------+------------------------------+------+-----+---------+-------+ 

और एक आइटम तालिका:

+--------------------+------------------------------+------+-----+---------+-------+ 
| Field    | Type       | Null | Key | Default | Extra | 
+--------------------+------------------------------+------+-----+---------+-------+ 
| ItemId    | bigint(20) unsigned   | NO | PRI | NULL |  | 
| ItemName   | varchar(100)     | NO |  | NULL |  | 
+--------------------+------------------------------+------+-----+---------+-------+ 

बिक्री तालिका प्रत्येक ItemID के लिए कई रिकॉर्ड शामिल हैं - प्रत्येक सेलविक के लिए एक। मैं दो तालिकाओं इसलिए की तरह शामिल होने से बेचा सभी आइटम का चयन करना चाहते:

SELECT items.ItemName, items.ItemId FROM items 
JOIN sales ON items.ItemId = sales.ItemId 
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC; 

बहरहाल, यह प्रत्येक SaleWeek के लिए कई प्रविष्टियों के आधार पर कई लौटने Itemid मूल्यों। मैं करने के लिए एक अलग चयन कर सकते हैं केवल एक ItemID वापसी - मैं नवीनतम SaleWeek के लिए क्वेरी करने के लिए, क्योंकि कुछ आइटम नवीनतम SaleWeek के लिए एक प्रवेश नहीं हो सकता है नहीं करना चाहती तो मैं पिछले प्राप्त करने की आवश्यकता बिक्री। क्या मुझे DISTINCT निर्दिष्ट करने की आवश्यकता है या बाएं बाहरी जॉइन या कुछ का उपयोग करने की आवश्यकता है?

+1

क्या आपने DISTINCT की कोशिश की है? आपके द्वारा उपयोग किए जाने वाले डीबीएमएस के आधार पर यह आपके आदेश को खराब कर सकता है ... –

उत्तर

14

एक DISTINCT आप जो खोज रहे हैं करना चाहिए:

SELECT DISTINCT items.ItemName, items.ItemId FROM items 
JOIN sales ON items.ItemId = sales.ItemId 
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC; 

कि केवल विशिष्ट items.ItemName, items.ItemId tuples लौट आते हैं।

6

यो ने बिक्री सप्ताह के बारे में भी टिप्पणी की थी। और सबसे हाल ही में सप्ताह चाहने, आप यदि आप इतना है कि स्तंभ के आधार पर करना चाहते हैं क्रमसूचक 3 संदर्भ स्तंभ करके क्रम बदल करना पड़ सकता है द्वारा

SELECT 
     items.ItemName, 
     items.ItemId, 
     max(Sales.SaleWeek) MostRecentSaleWeek 
    FROM 
     items JOIN sales ON items.ItemId = sales.ItemId 
    WHERE 
     sales.StoreID = ? 
    GROUP BY 
     items.ItemID, 
     items.ItemName 
    ORDER BY 
     MostRecentSaleWeek, -- ordinal column number 3 via the MAX() call 
     items.ItemName 

एक ग्रुप का उपयोग कर प्रयास कर सकते हैं .. यह प्रश्न होगा आपको प्रत्येक विशिष्ट वस्तु और सबसे हालिया सप्ताह में बेचा गया था।

0
SELECT u.user_name,u.user_id, u.user_country,u.user_phone_no,ind.Industry_name,inv.id,u.user_email 
    FROM invitations inv 
    LEFT JOIN users u 
    ON inv.sender_id = u.user_id 
    LEFT JOIN employee_info ei 
    ON inv.sender_id=ei.employee_fb_id 
    LEFT JOIN industries ind 
    ON ei.industry_id=ind.id 
    WHERE inv.receiver_id='XXX' 
    AND inv.invitation_status='0' 
    AND inv.invitati 

on_status_desc='PENDING' 
GROUP BY (user_id) 
संबंधित मुद्दे