【问题标题】:SQL - Display a row twice while ordering the "duplicate repush" by date createdSQL - 在按创建日期订购“重复重新推送”时显示一行两次
【发布时间】:2015-11-23 02:37:52
【问题描述】:

我有一张表(“cmets”),里面有 cmets,它们的创建日期,如果通过 PHP 按钮将它们推到前面,那么日期也是(否则日期将是 '0000- 00-00')。我想要的是正常显示的表格,但是将被“拒绝”的 cmets 推送到表格中的某个位置,该位置的创建日期为 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 将所有 cmets 与重新推送的 cmets 组合(因此所有重新推送的 cmets 将出现在查询后重复),但是我想将重复的重新推送 cmets 视为如果它们是在它们被重新推送时创建的,那么我需要交换重复项的“created”和“repushed”列值以获得这种效果,然后按“created”排序。

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

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

【问题讨论】:

  • 您能添加您的预期结果吗?
  • 嗨。我在这里显示的表格是我的预期/预期结果

标签: php mysql union-all


【解决方案1】:

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

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

这会将重新推送的列重命名为 created

【讨论】:

  • 不应该只在第二个联合选择上订购吗?
  • 我得到:数据库查询失败:每个派生表都必须有自己的别名
  • 尝试我的编辑(删除括号内的顺序)
  • 还是同样的错误。我并没有真正关注 SELECT * FROM () 的使用,你能详细说明一下吗?谢谢
  • 以前是通过创建所有数据进行排序,在@Justin 评论后我删除了该排序,因此不再需要它。
猜你喜欢
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多