我正在使用mysql ver开发一个篮子应用程序。 5.6 .. 在每个团队的日历上,我想知道如果游戏是下一个即将到来的游戏,返回1或0值。
我尝试过这个查询,但如果当天有游戏,则不予考虑;另外,如果有游戏,例如下个月,也不考虑(我知道是因为我按周设置了一个间隔):
select home, away,
(case when (score_home = 0 and score_away = 0)
and (match_date between now() and date_add(now(), interval 7 day))
then 1 else 0 end) as is_next
from calendario
order by year(match_date) asc, month(match_date) asc, day(match_date) asc
EDITED 示例数据
请看一下这个样本数据。为什么所有列都是0?
我尝试了这段代码:
SELECT C.ID, C.DATA, C.IDCAMPIONATO, (C.DATA >= CURDATE() AND NOT EXISTS (SELECT 1 FROM CALENDARIO C2 WHERE C2.DATA >= CURDATE() AND C2.DATA < C.DATA)) AS IS_NEXT
FROM CALENDARIO C
WHERE C.IDCAMPIONATO = 5
ORDER BY DATE(C.DATA) ASC
答案 0 :(得分:2)
这是因为过滤。 now()
包含时间组件。您需要curdate()
来检查是否有其他游戏匹配。以下内容将标记calendario
中的下一个游戏,这似乎是您要求的:
select c.*,
(c.match_date >= curdate() and
not exists (select 1
from calendario c2
where c2.match_date >= curdate() and
c2.match_date < c.match_date
)
) as is_next
from calendario c
order by date(c.match_date) asc;
我对这个问题有几点不明白:
您可能想要提出另一个问题,将问题数据作为问题中的文字,以及更好地描述您的数据以及您真正想要做的事情。
答案 1 :(得分:1)
我在您的示例数据中注意到您有一个列ID。这个专栏是Auto-Inc吗?如果是,你可以使用它的潜力:
SELECT C.ID, C.DATA, C.IDCAMPIONATO,
(CASE WHEN CAL.ID = (SELECT C2.ID FROM CALENDARIO C2 WHERE C2.DATA >= CURDATE() AND C2.IDCAMPIONATO = IDCA ORDER BY C2.DATA LIMIT 1) THEN 1 ELSE 0 END) AS IS_NEXT,
FROM CALENDARIO C
WHERE C.IDCAMPIONATO = 5
ORDER BY DATE(C.DATA) ASC
我认为您使用“IDCAMPIONATO”列来识别团队,对吗?
希望得到这个帮助。
答案 2 :(得分:0)
您可以添加检查今天是否匹配,然后按日期排序,您可以限制1条记录以获得下一场比赛。
select home, away, '1' as is_next
from games where matchdate > now()
order by matchdate asc limit 1;