2013-03-25 63 views
0

通過ID取的名字,我有兩個表,一個叫果實:訂單查詢和其他表

id title 

1 Banana 
2 Apple 
3 Orange 

而第二fruits_chosen:

user_id fruit_id 

    1  1 
    2  1 
    2  3 
    3  1 
    3  2 
    3  3 

它應該返回:

Banana 3 times 
Orange 2 times 
Apple 1 time 

現在我建立一個查詢獲取項目,按count排序,但我不知道如何從標題中獲取標題在同一個查詢中的其他表,有什麼想法?

回答

1
SELECT 
COUNT(*) as count, 
f.title, 
fruit_id 
FROM fruits_chosen fc 
INNER JOIN fruits f on f.id = fc.fruit_id 
GROUP BY 
fc.fruit_id, f.title 
ORDER BY count DESC 
LIMIT 5 

SqlFiddle

+0

臨屋nks,首先如此接受:) – 2013-03-25 18:51:53

2

您將要JOIN使用fruit_idid列,類似這樣的表格:

SELECT f.title, 
    COUNT(fc.fruit_id) as count 
FROM fruits_chosen fc 
INNER JOIN fruits f 
    on fc.fruit_id = f.id 
GROUP BY f.title 
ORDER BY COUNT(fc.fruit_id) DESC LIMIT 5 

SQL Fiddle with Demo

這是USI將只返回在兩個表中匹配的那些行。如果你想返回所有fruits不管它是否被選中,那麼你可以使用一個LEFT JOIN

SELECT f.title, 
    COUNT(fc.fruit_id) as count 
FROM fruits f 
LEFT JOIN fruits_chosen fc 
    on fc.fruit_id = f.id 
GROUP BY f.title 
ORDER BY COUNT(fc.fruit_id) DESC LIMIT 5 

SQL Fiddle with Demo

然後,如果您希望它返回Banana 3 times等,你可以使用在CONCAT功能在MySQL:

SELECT 
    concat(f.title, ' ',COUNT(fc.fruit_id), ' times') Total 
FROM fruits f 
LEFT JOIN fruits_chosen fc 
    on fc.fruit_id = f.id 
GROUP BY f.title 
ORDER BY COUNT(fc.fruit_id) DESC LIMIT 5 

SQL Fiddle with Demo

+0

感謝@bluefeet,爲您詳細闡述答案,輕鬆理解您解釋它的方式! :) – 2013-03-25 18:14:19