MySQL统计赢家/输家数以获得连胜

MySQL统计赢家/输家数以获得连胜,mysql,count,phpmyadmin,Mysql,Count,Phpmyadmin,我有一张包含日期、团队和结果的体育比赛表。我想知道一支球队目前的胜负情况 我的桌子看起来像这样: +------------+----------+---------+---------------+------+------------+ | date_month | date_day | visitor | visitor_score | home | home_score | +------------+----------+---------+---------------+------

我有一张包含日期、团队和结果的体育比赛表。我想知道一支球队目前的胜负情况

我的桌子看起来像这样:

+------------+----------+---------+---------------+------+------------+
| date_month | date_day | visitor | visitor_score | home | home_score |
+------------+----------+---------+---------------+------+------------+
| May        | 1        | MyTeam  | 90            | Z    | 100        |
+------------+----------+---------+---------------+------+------------+
| April      | 26       | X       | 100           |MyTeam| 90         |
+------------+----------+---------+---------------+------+------------+
| April      | 21       | Y       | 90            |MyTeam| 100        |
+------------+----------+---------+---------------+------+------------+
| March      | 25       | MyTeam  | 90            | W    | 100        |
+------------+----------+---------+---------------+------+------------+
SELECT COUNT(*), retrieveLastResult 
FROM Schedule
WHERE
STR_TO_DATE(CONCAT(date_month, date_day, YEAR(CURDATE())),"%M%d%Y") 
    BETWEEN DATE_SUB(retrieveFirstResultDateDifferentFromLastOne(retrieveLastResult,retrieveLastGameDate),INTERVAL 1 DAY) 
       AND retrieveLastGameDate() 
我已经完成了按日期排序结果

SELECT * FROM Schedule WHERE visitor_score>0
            ORDER BY CASE
            when `date_month` = 'May' then 1
            when `date_month` = 'April' then 2
            when `date_month` = 'March' then 3
            else 4
            end asc, date_day desc
问题是,如何找到一支球队的连胜?我的球队输掉了最后两场比赛,所以应该是0胜2负。但如果它赢了下一场比赛,显然应该是1胜0负

我知道如何提取赢家和输家,如下所示,但这是我一直坚持的观点

WHERE (visitor = 'MyTeam' && visitor_score>home_score) OR (home = 'MyTeam' && home_score>visitor_score)

我不会抱怨你的桌子结构。 我假设您不能更改表结构

我已经完成了按日期排序结果

SELECT * FROM Schedule WHERE visitor_score>0
            ORDER BY CASE
            when `date_month` = 'May' then 1
            when `date_month` = 'April' then 2
            when `date_month` = 'March' then 3
            else 4
            end asc, date_day desc
你的解决方案很难看。考虑使用类似的:

SELECT STR_TO_DATE(CONCAT(date_month, date_day, YEAR(CURDATE())),"%M%d%Y") AS date
请注意,我必须使用YEARCURDATE,因为STR_to_DATE函数中必须使用年份,而且您似乎没有存储游戏的年份。 现在您可以简单地:按日期说明订购

现在我要解释我脑海中出现的关于W/L/D赢、输、平连胜的第一个解决方案

声明3个功能:

retrieveLastResult返回W、L、D retrieveLastGameDate返回日期月、日 retrieveFirstResultDateDifferentFromLastOne返回第一场比赛的日期,结果与上一场比赛不同 下面是每个函数体的模拟

一旦具备这些功能,您可以简单地执行以下操作:

+------------+----------+---------+---------------+------+------------+
| date_month | date_day | visitor | visitor_score | home | home_score |
+------------+----------+---------+---------------+------+------------+
| May        | 1        | MyTeam  | 90            | Z    | 100        |
+------------+----------+---------+---------------+------+------------+
| April      | 26       | X       | 100           |MyTeam| 90         |
+------------+----------+---------+---------------+------+------------+
| April      | 21       | Y       | 90            |MyTeam| 100        |
+------------+----------+---------+---------------+------+------------+
| March      | 25       | MyTeam  | 90            | W    | 100        |
+------------+----------+---------+---------------+------+------------+
SELECT COUNT(*), retrieveLastResult 
FROM Schedule
WHERE
STR_TO_DATE(CONCAT(date_month, date_day, YEAR(CURDATE())),"%M%d%Y") 
    BETWEEN DATE_SUB(retrieveFirstResultDateDifferentFromLastOne(retrieveLastResult,retrieveLastGameDate),INTERVAL 1 DAY) 
       AND retrieveLastGameDate() 
检索结果函数 retrieveFirstResultDateDifferentFromLastOne函数