2013-07-02 146 views
0

我有以下查询查询涉及团队的最后20场比赛的运动结果表,每个匹配都会返回目标。MySql排序在排序结果集内

SELECT *, `against` AS `goalsF` , `for` AS `goalsA` 
FROM `matches` , `teams` , `outcomes` 
WHERE (
`home_team_id`=7 AND `matches`.away_team_id = `teams`.team_id 

OR 
`away_team_id`=7 AND `matches`.home_team_id = `teams`.team_id 
) 
AND `matches`.score_id = `outcomes`.outcome_id 
ORDER BY `against', `date` DESC 
LIMIT 0 , 20 

我想根据目标对结果进行排序,然后在按日期排列的每组目标中进行排序。

第4个结果,其中目标日期顺序 那么接下来的3失球= 1结果可能会在那里按日期顺序排列

我已经试过ORDER by date,against失球= 2 - 这给了我一个严格的时间顺序 我有尝试ORDER by against,date - 这给了我超过最后20个比赛

是否有可能做我想做的事情?

+0

考虑再次启动,只需要一个清晰简洁的“sqlfiddled”[http://www.sqlfiddle.com/]数据集,以及您期望查询的结果集。 – Strawberry

+0

同样(和相关),我不确定那些AND和ORs的工作方式完全符合您的预期 - 但我可能是错的! – Strawberry

回答

-1

如果您想按日期进行限制,请将您要查找的日期范围添加到您的WHERE子句中,然后按照承认的目标数量进行排序。

+0

我不知道具体的日期范围,我只需要最后的x个比赛,这将始终是一个可变的日期范围。 –

0

谢谢大家,我发现这工作。这个解决方案是由另一个用户发布的,但之后被删除了,不知道为什么?

SELECT * FROM (
    SELECT *, `against` AS `goalsF` , `for` AS `goalsA` 
    FROM `matches` , `teams` , `outcomes` 
    WHERE (
     `home_team_id`=7 AND `matches`.away_team_id = `teams`.team_id 
     OR 
     `away_team_id`=7 AND `matches`.home_team_id = `teams`.team_id 
    ) 
    AND `matches`.score_id = `outcomes`.outcome_id 
    ORDER by `goalsF` 
    LIMIT 0 , 20 
) res 
ORDER BY `date` DESC 
+0

关于提炼结果我还有一个问题,但我会开始另一个问题...... –