我有一个名为match
的表,其中包含足球比赛的所有matches
。表的结构如下:
id | round_id | datetime | status | home | away | result
实际上,每个match
都有一个status
,表示:
还有指示competition
引用的round_id
。
在我的应用程序中,我每次都会检查是否需要更新特定的round
。为此,我首先检查联盟的所有matches
是否都包含3
或5
状态。查询如下:
SELECT (COUNT(*) = SUM(status in (3, 5))
AND COUNT(*) = 380) AS result
FROM `match` WHERE round_id = 10
因此,如果380
匹配被取消或完成,则更新round
10。
如果上面查询的结果为假,因此需要更新轮次,那么我必须检查需要更新哪个matches
。
为此,我编写了以下查询:
SELECT COUNT(*) AS result FROM `match` m2
WHERE m2.round_id = 10
AND m2.datetime < NOW() AND m2.status IN (1, 2)
上面的查询检查是否存在datetime
低于当前的matches
,以及它们的状态是1
还是2
,具体地说(scheduled和postponed)。
由于以下原因,我对我的实现并不是很满意:
match
的编号,但我的目标是返回一个boolean
。不幸的是,我的sql
技能还不够高级。是否可以将这两个查询合并为一个简单的检查?
提前感谢你的帮助。
UPDATE -具有数据结构的数据库
id | round_id | datetime | status | home | away | result
1 10 2018-08-15 00:00:00 5 A B 1-0
2 10 2018-08-15 00:00:00 5 C D 1-1
3 10 2018-08-15 00:00:00 5 E F 2-1
4 10 2018-08-15 00:00:00 5 G H 2-2
上面的matches
都更新了,因为状态是5
,所以round
10不需要任何更新。第一个查询将返回true
,第二个查询将返回0。
现在考虑这个例子:
id | round_id | datetime | status | home | away | result
1 11 2018-08-15 00:00:00 5 A B 1-0
2 11 2019-08-15 00:00:00 1 C D
3 11 2019-01-15 00:00:00 5 E F 2-1
4 11 2019-03-12 00:00:00 1 G H
round
11需要更新,因为我们安排了2个matches
,但只有id
为4的match
已经播放,因此查询需要返回false
,因为round
11没有更新。
https://stackoverflow.com/questions/55159557
复制相似问题