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

标签 php mysql union-all

我有一个充满评论的表格(“评论”),它们的创建日期,如果通过 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/

相关文章:

sql-server - SQL Server : ORDER BY in subquery with UNION

MySQL UNION ALL 从别名创建列

php - PHP error_reporting(0) 会影响错误记录,还是只是显示?

php - 从 php 连接 Access 数据库

php - 可以在用户定义的 php 函数中编写 try 和 catch 语句

即使使用 SQL_NO_CACHE,第二次运行 Mysql 查询也要快得多

php - jeditable、pdo 和 mysql

php - sfDoctrineGuardPlugin : login with email

mysql - 我正在使用 Ruby on Rails,我想删除一个数据库条目。我可以将条目设为 "cut"并将所有较大的 ID 减一吗?

带有 Union All 的 View 中的 MySQL Case 语句