2016-07-20 10 views
1

sqlのサブクエリに少し問題があります。 彼女のクエリmysqlサブクエリーselect from field with

SELECT st.title, count(q.id) as question_count, max(a.id) as maxid, 
      sum(case when a.answer is not null then 1 else 0 end) as answer_count, g.user_id as game_user_id, 
      a.game_id as a_game_id, a.modified as finished, (select modified as finished from answers a where a.id = g.maxid limit 1) as subquery 
     FROM games g 
     left join answers a on(a.game_id = g.id) 
     left join questions q on(a.question_id = q.id) 
     left join sessions s on(s.id = q.session_id) 
     left join sessiontypes st on(st.id = s.sessiontype_id) 
     WHERE g.user_id = 21 
     group by g.id 
     having(question_count = answer_count) 
     order by finished DESC; 

私は、サブクエリがidが最高のゲームによってグループ化された解答から変更された値を返すことにしたいです。

だから私はselect max(id) as maxid...とサブクエリの最大IDを使用しようとしました。 where a.id = maxid。素敵な試みですが、仕事はしません。 mysqlエラーはこれです:Reference 'maxid' not supported (reference to group function)

誰かがそれを解決するヒントを教えていただけますか?

答えて

0

MAX(answers.id)answers.game_idでグループ化したサブクエリで結合します。

maxidを使用してanswersテーブルに参加し、対応するanswers.idの行を取得します。

あなたの結果が見た目にどのようになっているかわからないa.modified AS finished,を削除し、maxidの行のmodified列に置き換えました。

SELECT 
    st.title, 
    count(q.id) AS question_count, 
    sum(
     CASE 
     WHEN a.answer IS NOT NULL THEN 
      1 
     ELSE 
      0 
     END 
    ) AS answer_count, 
    g.user_id AS game_user_id, 
    a.maxid, 
    a.game_id AS a_game_id, 
    modifiedAnswer.modified AS finished, 
FROM 
    games g 

LEFT JOIN (SELECT MAX(answers.id) AS maxid, game_id FROM answers GROUP BY answers.game_id) AS a ON (a.game_id = g.id) 
LEFT JOIN answers AS modifiedAnswer ON modifiedAnswer.id = a.maxid 

LEFT JOIN questions q ON (a.question_id = q.id) 
LEFT JOIN sessions s ON (s.id = q.session_id) 
LEFT JOIN sessiontypes st ON (st.id = s.sessiontype_id) 
WHERE 
    g.user_id = 21 
GROUP BY 
    g.id 
HAVING 
    (
     question_count = answer_count 
    ) 
ORDER BY 
    finished DESC; 
+0

私はあなたが何を意味していると思いますか?クエリは機能しません。 ;) –

+0

データはありますか? +予想される結果、このクエリのエラーメッセージ+私はサブクエリのエイリアスを混乱させたと思うが、idの後ろにgame_idの後に置く。クエリで修正されました – Philipp

+0

はい、問題でした。有難うございます。私は何をしたいのですか? このSQLは非常に混乱しています:P –