MySQL递归查询取决于结果

标签 mysql

我有游戏表。

id  |  team1   | team2  |  score1  |  score2  |  date
 1     Hawks     Ducks          1          2     2016-12-02
 2     Sharks    Flyers         3          0     2016-12-02
 3     Kings     Oilers         1          3     2016-12-03
 4     Leafs     Stars          4          3     2016-12-03
 5     Blues     Jets           2          5     2016-12-04
 ..    ..        ..            ..         ..     ..

我需要至少玩 10 场比赛。我如何编写 MySQL 查询,如下所示:

SELECT * FROM games
WHERE date > NOW() - INTERVAL 1 DAY
  AND date < NOW() + INTERVAL 1 DAY

如果查询结果少于10行,则

SELECT * FROM games
WHERE date > NOW() - INTERVAL 2 DAY
  AND date < NOW() + INTERVAL 2 DAY

如果查询结果少于10行,则

SELECT * FROM games
WHERE date > NOW() - INTERVAL 3 DAY
  AND date < NOW() + INTERVAL 3 DAY

等...

为什么会这样?有时一周没有比赛,有时每天都有很多比赛。

我只想在一个 MySQL 查询中编写它。

最佳答案

SELECT * , ABS(TIMESTAMPDIFF(DAY, date_of_game , NOW())) as 'diff_days'
FROM games 
ORDER BY diff_days
LIMIT 10

我已重命名您的日期列,因为日期是 MySQL 中的保留字。

我创建了一个 sqlfiddle,您可以在其中检查代码的行为:

http://sqlfiddle.com/#!9/33c381d/6

关于MySQL递归查询取决于结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946020/

相关文章:

PHP 提交时出现成员(member)注册问题

php - 如何在php中使用变量更新数据库字段?

带求和查询的 MYSQL case 语句

php - 如何使用 php 表单和 mysql 创建动态管理面板?

php - 生成 Wordpress 页面子级的标题和缩略图列表

mysql - 如何在sql查询中表示一组数字

mysql - 访问 Joomla 数据库

php - 尝试通过制作可重用功能来减少代码点火器中的代码

php - Javascript:如何从输入表格的内容中找到相似的短语或文本?

php - Channel.Connect.Failed 错误 NetConnection.Call.BadVersion