2016-09-01 18 views
0

私はゲームのエントリを含むデータベーステーブルを持っている:別のテーブルのカウントでMySQLの結果を注文する方法は?

-------------------------------------------------------- 
| game_id | title | description | entry_time   | 
-------------------------------------------------------- 
| 1  | Game 1 | Descript... | yyyy-mm-dd hh:mm:ss | 
-------------------------------------------------------- 
| 2  | Game 2 | Descript... | yyyy-mm-dd hh:mm:ss | 
-------------------------------------------------------- 

、別含んだゲームプレイ履歴:

----------------------------------------------- 
| game_id | user_id  | entry_time   | 
----------------------------------------------- 
| 1  | 0da89sadf89 | yyyy-mm-dd hh:mm:ss | 
----------------------------------------------- 
| 1  | f8jsf89vjs9 | yyyy-mm-dd hh:mm:ss | 
----------------------------------------------- 
| 2  | f8jsf89vjs9 | yyyy-mm-dd hh:mm:ss | 
----------------------------------------------- 

私はゲームの人気に基づいて、最初のテーブルからの結果を選択しようとしています。

SELECT games.game_id, games.title, games.description 
    FROM `games` 
    JOIN foo_db.game_plays game_plays 
    ON game_plays.game_id LIKE games.game_id 
    WHERE games.title LIKE "%game%" 
    ORDER BY COUNT(game_plays.game_id) DESC, games.entry_time DESC 
    LIMIT 10 

何らかの理由で、結果が1つだけ返されます(「ゲーム1」)。

JOINを削除し、結果をentry_timeで注文すると、両方の結果が期待通りに返されます。

+1

'GROUP BY'が欠落しています。 'JOIN'も正しく処理されません。 – 1000111

+0

'JOIN'を拡張することができます(私は' GROUP BY'を追加しました。 – Krii

+0

game_plays.game_id LIKE games.game_id?どうしてですか?game_plays.game_id = games.game_id – Jens

答えて

1

私はこのクエリを作成しました。これを試してください。

SELECT a.game_id, a.title, a.description, b.total 
    from games a 
    JOIN (SELECT game_id, count(user_id) as total from 
      game_play group by game_id) b 
    ON a.game_id = b.game_id 
    AND a.title LIKE '%Game%' 
    ORDER BY b.total DESC, a.entry time DESC 

OUTPUT

Click Here

それに役立つことを願っています。

1

JOINGROUP BYを混合する際、MySQLは時々、本当に遅いのでcorelatedサブクエリは良い選択肢かもしれません:

SELECT games.game_id, games.title, games.description 
FROM `games` 
WHERE games.title LIKE "%game%" 
ORDER BY (
    SELECT COUNT(game_plays.game_id) 
    FROM foo_db.game_plays 
    WHERE game_plays.game_id = games.game_id 
) DESC, games.entry_time DESC 
LIMIT 10 
関連する問題