好吧,我有一个带有字段的表格

Table: comments
    id (primary key, increment, int)
    post_id(foreign key, int)
    user_id (foreign key, int)
    content (text)
    timestamp

Data
1, 1, 1, hello, timestamp
2, 3, 4, 123, timestamp
3, 1, 5, 1245, timestamp
4, 1, 8, test, timestamp
5, 1, 10, hi, timestamp
6, 3, 1, this is 3, timestamp


即使我按时间戳排序,如何选​​择5个结果中包含user_id 1的结果?

让我们考虑数据集,最低的行(5)具有最新的时间戳,而1具有最旧的时间戳。

我需要将ID 1(用户ID为1)包含在限制5中,即使它的时间戳是最旧的。

预期返回的行ID:

1, 5, 4




5, 4, 3


我想出的SQL无法正常工作:

SELECT id FROM comments WHERE post_id = 1 ORDER BY user_id = 1, timestamp DESC DESC LIMIT 3


我怎么做

最佳答案

您可以通过user_id = 1进行订购:

SELECT stuff
FROM comments
ORDER BY user_id = 1 DESC, timestamp DESC
LIMIT 3


这可以通过以下方式进行:
order by子句:对于第一个ID,user_id = 1将被评估为true(或更容易被1看到),对于其他具有其他user_id的行,将被评估为false(或0)。因此,您有一个包含01(按DESC排序)的输入字段,返回

+----+------+-------------+------------------------+
| id | user | user_id = 1 |       timestamp        |
+----+------+-------------+------------------------+
|  1 |    1 |           1 | oldest timestamp       |
|  5 |   10 |           0 | newest timestamp       |
|  4 |    8 |           0 | some timestamp between |
+----+------+-------------+------------------------+

10-07 13:20
查看更多