gpt4 book ai didi

Mysql order by top two then id

转载 作者:行者123 更新时间:2023-11-29 05:09:10 25 4
gpt4 key购买 nike

我想显示前两个投票最高的帖子,然后显示其他按 id 排序的帖子

这是表格

+----+-------+--------------+--------+
| Id | Name | Post | Votes |
+====+=======+==============+========+
| 1 | John | John's msg | -6 |
| 2 |Joseph |Joseph's msg | 8 |
| 3 | Ivan | Ivan's msg | 3 |
| 4 |Natalie|Natalie's msg | 10 |
+----+-------+--------------+--------+

查询后的结果应该是:

    +----+-------+--------------+--------+
| Id | Name | Post | Votes |
+====+=======+==============+========+
| 4 |Natalie|Natalie's msg | 10 |
| 2 |Joseph |Joseph's msg | 8 |
-----------------------------------------------
| 1 | John | John's msg | -6 |
| 3 | Ivan | Ivan's msg | 3 |
+----+-------+--------------+--------+

我有 1 个解决方案,但我觉得有更好更快的方法来解决。我运行 2 个查询,一个获得前 2 个,然后第二个获得其他查询:

SELECT * FROM table order by Votes desc LIMIT 2

SELECT * FROM table order by Id desc

然后在 PHP 中,我确保按原样显示第一个查询,并在显示第二个查询时删除第一个查询中的条目,这样它们就不会加倍。这可以在单个查询中完成以选择前两个最高投票,然后是其他吗?

最佳答案

您将不得不使用子查询或联合 - 这意味着您只有一个外部查询,其中包含多个内部查询。我会简单地从第一个查询中检索 ID,并在第二个查询的 where 子句中添加一个 id not in (...) 条件——从而过滤掉在第一个查询中检索到的帖子:

SELECT * FROM table WHERE Id NOT IN (...) ORDER BY Id DESC

union查询如下所示:

(SELECT table.*, 1 as o FROM table order by Votes desc LIMIT 2)
UNION
(SELECT table.*, 0 FROM table
WHERE Id NOT IN (SELECT Id FROM table order by Votes desc LIMIT 2))
ORDER BY o DESC, if(o=1,Votes,Id) DESC

如您所见,它将 3 个查询合并为一个查询,并且排序也更复杂,因为在 union 中,检索到的记录的顺序无法保证。

在这种特殊情况下,两个简单的查询对我来说似乎更有效。

关于Mysql order by top two then id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42551279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com