MySQL子查询分组依据

MySQL子查询分组依据,mysql,group-by,subquery,Mysql,Group By,Subquery,我有一个查询,它根据一个人的id(athleteid)显示比赛结果列表。我已经查询了数据库,以便它按照时间(性能)和事件(eventid)的顺序列出该人的种族,但我正在努力将其设置为子查询,以便我可以在之后对结果进行分组,以便为每个eventid提供最快的性能。这就是我到目前为止所做的: $id = $_GET['id']; $query = sprintf("SELECT events.eventcode, meetings.meetingid, meetings.meetingname, m

我有一个查询,它根据一个人的id(athleteid)显示比赛结果列表。我已经查询了数据库,以便它按照时间(性能)和事件(eventid)的顺序列出该人的种族,但我正在努力将其设置为子查询,以便我可以在之后对结果进行分组,以便为每个eventid提供最快的性能。这就是我到目前为止所做的:

$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");
这可以正常工作,并以正确的顺序显示所有相关条目。然后我尝试将其转换为子查询,以便使用GROUPBY,但没有成功。这正是我想要做的:

$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");
但是,这给了我一个错误,它指出:“group语句”中的未知列“t1.eventid”


如果您没有在子查询中选择
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
.......

这是因为子查询中没有该列,请尝试在子查询中添加该列,然后选择:

$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");

您好,如果您在mysql中使用
分组依据
,则
分组依据
中的
字段名
必须位于
所选列
。使用
Select*,t1.eventid from(Select..
。谢谢