我正在使用MySQL 5.0.12,我有下表:
has_many :control_comments, class_name: "Control::Comment",inverse_of: 'control_news', :foreign_key => 'control_news_id'
正如您所看到的,我发生了8次post_id | post_id | price | created_at |
|---------|-------|---------------------|
| 10 | 3.5 | 2018-06-18 07:36:34 |
| 11 | 4.8 | 2018-06-17 07:36:34 |
| 10 | 5 | 2018-06-16 07:36:34 |
| 10 | 5 | 2018-06-15 07:36:34 |
| 6 | 3.6 | 2018-06-12 07:36:34 |
| 10 | 2 | 2018-06-14 07:36:34 |
| 10 | 6 | 2018-06-13 07:36:34 |
| 10 | 9 | 2018-06-12 07:36:34 |
| 10 | 4 | 2018-06-11 07:36:34 |
| 10 | 3.6 | 2018-06-09 07:36:34 |
。
因此,我希望从今天的日期开始最后6次。
10
我知道如何选择正确的post_id,但我正在努力选择今天的最后6次出现日期:
| post_id | price | created_at |
|---------|-------|---------------------|
| 10 | 3.5 | 2018-06-18 07:36:34 |
| 10 | 5 | 2018-06-16 07:36:34 |
| 10 | 5 | 2018-06-15 07:36:34 |
| 10 | 2 | 2018-06-14 07:36:34 |
| 10 | 6 | 2018-06-13 07:36:34 |
| 10 | 9 | 2018-06-12 07:36:34 |
如何从今天的日期算起最后6次?
答案 0 :(得分:5)
你会这样做:
SELECT * FROM product
WHERE post_id = 10
ORDER BY created_at DESC
LIMIT 6
您按日期降序排序,这样您就可以获得最新的日期。而且你限制为6,所以你只能得到你正在寻找的6个。
答案 1 :(得分:1)
使用LIMIT
关键字获取查询的第n行。例如:
SELECT * FROM product WHERE post_id = 10 LIMIT 6
请记住,此示例将返回前6行。您可以使用ORDER BY
关键字来控制前6行的内容。
在您的情况下,您需要:
SELECT * FROM product WHERE post_id = 10 ORDER BY created_at DESC LIMIT 6
答案 2 :(得分:1)
使用DATE_ADD(CURDATE(), INTERVAL -6 DAY)
。
SELECT *
FROM product
WHERE post_id = 10
AND created_at >= DATE_ADD(CURDATE(), INTERVAL -6 DAY)
输出:
post_id price created_at
10 3.5 2018-06-18 07:36:34
10 5 2018-06-16 07:36:34
10 5 2018-06-15 07:36:34
10 2 2018-06-14 07:36:34
10 6 2018-06-13 07:36:34
10 9 2018-06-12 07:36:34