2016-03-24 20 views
0

Benimle ilişkili 3 tablo var ve ihtiyacım olan her şeyi alabilmem için verileri doğru şekilde sorgulamaya çalışıyorum.Kompleks MySQL sorgusu tabloları doğru bir şekilde birleştiriyor

+-----------+-------------+---------+-----+ 
| order_id | buyer_email | user_id | ... | 
+-----------+-------------+---------+-----+ 
| 1AB45 | [email protected] | 123  |  | 
| YE72H | [email protected] | 124  |  | 
| HWYE1 | [email protected] | 125  |  | 
+-----------+-------------+---------+-----+ 

reg_keys

+-----------+-------------+---------+------------+ 
| reg_key | time_redeem | user_id | product_id | 
+-----------+-------------+---------+------------+ 
| UN-12XZ | 2015-11-12 | 123  | 3214 | 
| UN-34AB | 2015-10-12 | 125  | 5311 | 
| UN-67UY | 2015-09-12 | 125  | 314  | 
+-----------+-------------+---------+------------+ 

Ben kayıt tüm almak için arıyorum

+------------+--------------+------+-----+ 
| order_id | product_id |count | max | 
+------------+--------------+------+-----+ 
| 1AB45  | 3214   | 1 | 20 | 
| YE72H  | 314   | 2 | 20 | 
| HWYE1  | 5311   | 3 | 10 | 
| HWYE1  | 314   | 1 | 20 | 
+------------+--------------+------+-----+ 

emir

ORDER_ITEMS: Burada

Ben 3 tablolar vardır anahtarlar sayım/quanity 1'e eşittir ve time_redeemed NULL değildir.

SELECT * FROM order_items 
JOIN orders ON orders.order_id = order_items.order_id 
JOIN reg_keys ON reg_keys.user_id=orders.user_id and reg_keys.product_id=order_items.product_id 
WHERE count=1 and reg_keys.redeemed_by is not null 
GROUP BY reg_key ORDER BY time_redeem DESC 

Bu bana hiçbir sonuç elde edilir: Burada aynı e-posta/order_id ile diğer emir bilgi her sonuçlar elde ancak üzerine yazar benim sorgu var. Ne dağınıklık yaptım?

+1

seçmeyin '* seçin. . . grup tarafından yanlıştır. 'Group by' kullanıyorsanız, normalde' select''de toplama işlevlerine sahip olursunuz. –

+0

'reg_keys.redeemed_by' sorgusunda karışıklık ve' reg_keys.time_redeem' açıklamanızda? – Zimmi

cevap

0

tarafından grup kullanın ve anahtar sütunu

SELECT 
    reg_keys.reg_key * 
FROM 
    order_items 
JOIN 
    orders ON orders.order_id = order_items.order_id 
JOIN 
    reg_keys ON reg_keys.user_id = orders.user_id 
      AND reg_keys.product_id = order_items.product_id 
WHERE 
    count = 1 
    AND reg_keys.redeemed_by IS NOT NULL 
ORDER BY time_redeem DESC;