0

我有两张桌子,一张叫水果:

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

现在我构建了一个查询来获取项目,按计数对它们进行排序,但我不知道如何在同一个查询中从另一个表中获取标题,有什么想法吗?

"SELECT COUNT(fruit_id) as count, fruit_id FROM fruits_chosen GROUP BY fruit_id ORDER BY COUNT(fruit_id) DESC LIMIT 5"
4

2 回答 2

2

您将需要JOIN使用fruit_idtoid列的表,类似于以下内容:

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

这是使用INNER JOIN将仅返回在两个表中匹配的那些行。如果您想全部返回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

如果您希望它返回Banana 3 times等,您可以使用CONCATMySQL 中的函数:

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

于 2013-03-25T17:45:38.467 回答
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

于 2013-03-25T17:43:51.953 回答