我有一个充满评论的表格(“评论”),它们的创建日期,如果通过 PHP 按钮将它们推到最前面,还有日期(否则日期将为 '0000- 00-00')。我想要的是表格正常显示,但要将被“拒绝”的评论推送到表格中的某个位置,其中 ORDER BY
的创建日期(“创建").
这是我想要实现的一个例子,它涉及将旧评论(ID:4)推到顶部(注意:表中没有重复的 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
将所有评论与重新推送的评论结合起来(因此所有重新推送的评论将出现一旦被查询就会重复),但是我想对待重复的重新推送的评论就好像它们是在重新推送时创建的一样,所以我需要交换重复项的“创建”和“重新推送”列值以获得这种效果,然后按“创建”排序。
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
这会将 repushed 的列重命名为 created
关于php - SQL - 按创建日期排序 "duplicate repush"时显示一行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862939/