查询上一场和下一场比赛

时间:2016-07-25 09:00:02

标签: php mysql phpmyadmin

我有一个带有“CALENDAR”表的phpmyadmin数据库,其中包含团队之间所有游戏的列表。

这是结构: ID,TEAM_HOME,TEAM_AWAY,DATE,RESULT_HOME,RESULT_AWAY

我需要创建一个只返回2条记录的mysql查询:上一个游戏(所以字段RESULT_HOME和RESULT_AVAY是<>'0');下一场比赛(比赛将会更近)。

拜托,您可以帮我查询一下吗? 我试过这个,但这对我来说不正确:

SELECT C.*
FROM CALENDAR AS C
WHERE C.DATA BETWEEN DATE_SUB(CURRENT_DATE,  INTERVAL '7' DAY) AND CURRENT_DATE
ORDER BY YEAR(C.DATA) ASC, MONTH(C.DATA) ASC, DAY(C.DATA) ASC
LIMIT 2

如果您需要更多详情,请告诉我

3 个答案:

答案 0 :(得分:2)

要获得具有非零结果的最新(在日期方面)游戏,您可以命令限制为那些非零结果,按日期排序并获取具有最大日期的单行,即如果您订购的第一行降:

SELECT … FROM CALENDAR AS C
WHERE … AND (RESULT_HOME <> 0 AND RESULT_AVAY <> 0)
ORDER BY C.DATA DESC
LIMIT 1

同样,对于相反的情况:结果为零的最小日期是:

SELECT … FROM CALENDAR AS C
WHERE … AND (RESULT_HOME = 0 OR RESULT_AVAY = 0)
ORDER BY C.DATA ASC
LIMIT 1

要将它们合并为一个查询,您可以使用UNION。但我更喜欢两个不同的查询。

独立地按日期的不同字段排序只会使DBMS变得复杂,没有任何好处。所以只按日期排序。

答案 1 :(得分:1)

我去了:

(SELECT * FROM CALENDAR作为C,其中RESULT_HOME&lt;&gt; 0 AND RESULT_AWAY&lt;&gt; 0 订购C.DATA DESC LIMIT 1)

UNION

(SELECT * FROM CALENDAR作为C,其中RESULT_HOME = 0或RESULT_AWAY = 0 订购C.DATA ASC限制1)

谢谢!

答案 2 :(得分:0)

如果你想回到最近两场比赛?

如果是这种情况请尝试DESC LIMIT 2

相关问题