mysql 按字段值优先

标签 mysql sql

好的,我有一个包含字段的表

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

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

让我们考虑一下数据集,最低行 (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 更可见),而 false (或 0)用于其他行,因为它们具有其他 user_id。因此,您有一个带有 01 的虚构字段,它们按 DESC 排序,返回

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

关于mysql 按字段值优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31423619/

相关文章:

mysql - 如何为每个 GROUP BY 条件返回多行

php - 如何使用 Fabrik(joomla 组件)表单连接到数据库表并搜索匹配并返回结果?

范围值之间的MySql查询(单条记录)

mysql - 如何使用 Solr 数据导入处理程序来索引 MySQL 表?

mysql - 分组并从每个组中获取最新行

mysql - 根据字段的组合权重对结果进行排序

sql - MySQL 评分系统(从两个表计算平均值)

phpMyAdmin - 如何将 mp3 文件保存在数据库中?

mysql - 在 Openshift v3 中将 mysql 与 Spring Boot 应用程序连接

mysql - SQL选择当前周/上周