我有一个这样的表:
// mytable
+----+-----------------+
| id | timestamp |
+----+-----------------+
| 1 | 1452001861 | -- yesterday
| 2 | 1452088272 | -- today
| 3 | 1452088283 | -- today
| 4 | 1451915461 | -- last week
| 5 | 1452001861 | -- yesterday
| 6 | 1452088263 | -- today
| 7 | 1252388263 | -- out of {today, yesterday, last week}
| 8 | 1452088312 | -- today
| 9 | 1452001762 | -- yesterday
| 10 | 1222388263 | -- out of {today, yesterday, last week}
| 12 | 1451915459 | -- last week
+----+-----------------+
这是我的查询:
SELECT * FROM mytable
WHERE DATE(FROM_UNIXTIME(timestamp)) >= CURDATE() - INTERVAL 7 DAY
ORDER BY timestamp DESC
上述查询选择从现在到过去 7 天之间的所有行。
<小时/>现在有时所有行都在最后 7 天之前(我的意思是最新的行是在最后 8 天添加的),然后该查询的输出将是什么(选择 0 行) 。
我想要的是,如果没有选择任何行(0 行),则选择最后 5 行(之前添加的)。我该怎么做?
最佳答案
您可以尝试这种方法:
SET @row_count := (SELECT COUNT(*)
FROM mytable
WHERE DATE(FROM_UNIXTIME(timestamp)) >= CURDATE() - INTERVAL 7 DAY);
IF (@row_count > 0) THEN
SELECT *
FROM mytable
WHERE DATE(FROM_UNIXTIME(timestamp)) >= CURDATE() - INTERVAL 7 DAY
ORDER BY timestamp DESC;
ELSE
SELECT *
FROM mytable
ORDER BY timestamp DESC
LIMIT 5;
END IF;
关于mysql - 选择了多少行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34640301/