2012-05-11 61 views
0

人のID(athleteid)に基づいてレース結果のリストを表示するクエリがあります。私は時間(パフォーマンス)とイベント(eventid)の順番で人のレースを列挙するようにデータベースを照会しましたが、後で結果をグループ化して最速で私を残すために、これをサブクエリとして設定するのには苦労しています各eventidのパフォーマンス。これは今まで私が持っているものです:MySQLサブクエリグループ

$id = $_GET['id']; 
$query = sprintf("SELECT events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.unit, results.wind, agegroups.agegroup 
FROM results 
JOIN athletes ON athletes.athleteid = results.athleteid 
JOIN meetings ON meetings.meetingid = results.meetingid 
JOIN events ON events.eventid = results.eventid 
JOIN agegroups ON agegroups.agegroupid = results.agegroupid 
WHERE results.athleteid='$id' AND events.eventtype = 'track' ORDER BY results.eventid asc, results.performance asc, meetings.meetingdate desc"); 

これはうまくいき、すべての関連エントリが正しい順序で表示されます。私はサブクエリに入れて、GROUP BYを使用できるようにしましたが、成功しませんでした。これは、私はそれで行くことにしようとしていたところである:任意のヘルプは大幅に

を高く評価している不明な列「t1.eventidを」「グループの声明」に

$id = $_GET['id']; 
$query = sprintf("SELECT * FROM (SELECT events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.unit, results.wind, agegroups.agegroup 
FROM results 
JOIN athletes ON athletes.athleteid = results.athleteid 
JOIN meetings ON meetings.meetingid = results.meetingid 
JOIN events ON events.eventid = results.eventid 
JOIN agegroups ON agegroups.agegroupid = results.agegroupid 
WHERE results.athleteid='$id' AND events.eventtype = 'track' ORDER BY results.eventid asc, results.performance asc, meetings.meetingdate desc) AS t1 
GROUP BY t1.eventid"); 

しかし、これは私に述べてエラーになります

+0

こんにちは、あなたはMySQLでは 'GROUP BY'を使用する場合は、 'Group By'の' fieldname'は 'selectedカラム'になければなりません。 'Select *、t1.eventid from(select..' ..)を使ってください –

答えて

0

サブクエリでeventidを選択していません。そこにいなければどうやってグループ化できますか?

あなたは、サブ選択の列を追加してみてください、サブクエリにその列を持っていない原因だ
SELECT events.eventid,events.eventcode, 
meetings.meetingid, meetings.meetingname, 
meetings.location, meetings.meetingdate, 
DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, 
results.performance, results.unit, results.wind, 
agegroups.agegroup 
....... 
0

$id = $_GET['id']; 
$query = sprintf("SELECT * FROM (SELECT events.eventid, events.eventcode, meetings.meetingid, meetings.meetingname, meetings.location, meetings.meetingdate, DATE_FORMAT(meetings.meetingdate,'%%d %%b %%Y') AS date, results.performance, results.unit, results.wind, agegroups.agegroup 
FROM results 
JOIN athletes ON athletes.athleteid = results.athleteid 
JOIN meetings ON meetings.meetingid = results.meetingid 
JOIN events ON events.eventid = results.eventid 
JOIN agegroups ON agegroups.agegroupid = results.agegroupid 
WHERE results.athleteid='$id' AND events.eventtype = 'track' ORDER BY results.eventid asc, results.performance asc, meetings.meetingdate desc) AS t1 
GROUP BY t1.eventid");