SQL - 按创建日期排序 "duplicate repush" 时显示一行两次

SQL - Display a row twice while ordering the "duplicate repush" by date created

我有一个 table ("comments") 满是评论,它们的创建日期,如果它们是通过 PHP 按钮推到前面的,日期也是(否则日期将是“0000-00-00”)。我想要的是 table 正常显示,但将 "repushed" 的评论推送到 table 中的某个位置,并带有 ORDER BY创建日期 ("created").

这是我想要实现的示例,其中涉及将旧评论(ID:4)推到顶部(注意:table 中没有重复的 ID,只有查询结果将重复重新推送的记录,如此处所示):

id | comment | created             | repushed
---+---------+---------------------+-------------------
4  | hello   | 2015-05-11 06:11:12 | 2015-11-22 11:17:01
23 | recent  | 2015-05-22 12:18:23 | 0000-00-00 00:00:00
22 | recent  | 2015-05-22 11:15:43 | 0000-00-00 00:00:00
21 | recent  | 2015-05-22 10:23:10 | 0000-00-00 00:00:00
4  | hello   | 2015-05-11 06:11:12 | 2015-11-22 11:17:01

所以我尝试使用 UNION 将所有评论与重新推送的评论结合起来(因此所有重新推送的评论将 出现 重复一次查询),但我想要将重复的重新推送的评论视为它们是在重新推送时创建的,因此我需要交换重复项的 "created" 和 "repushed" 列值以获得此效果,然后按 "created".

SELECT *
FROM comments
WHERE repushed != '0000-00-00 00:00:00'
UNION ALL                         
SELECT *
FROM comments
ORDER BY created DESC

当然这不能按预期工作,因为我不知道如何交换两列值。

使用您已有的东西试试这个:

SELECT id,comment,repushed as created,repushed 
FROM comments   
WHERE repushed != '0000-00-00 00:00:00' group by id
UNION ALL 
SELECT * 
FROM comments group by id ORDER BY created DESC

这会将重新推送的列重命名为已创建