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
这会将重新推送的列重命名为已创建
我有一个 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
这会将重新推送的列重命名为已创建