0

私は2つのテーブルを持っています。1つはフルーツと呼ばれ、次のものがあります。

id title

1  Banana
2  Apple
3  Orange

そして2番目の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

次のように、 to列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 FiddlewithDemoを参照してください

これは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 FiddlewithDemoを参照してください

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 FiddlewithDemoを参照してください

于 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 に答える