SQL - 在按创建日期订购“重复重新推送”时显示一行两次
Posted
技术标签:
【中文标题】SQL - 在按创建日期订购“重复重新推送”时显示一行两次【英文标题】:SQL - Display a row twice while ordering the "duplicate repush" by date created 【发布时间】: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
当然这不会按预期工作,因为我不知道如何交换两列值。
【问题讨论】:
您能添加您的预期结果吗? 嗨。我在这里显示的表格是我的预期/预期结果 【参考方案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 (以上是关于SQL - 在按创建日期订购“重复重新推送”时显示一行两次的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QTabWidget 中隐藏选项卡并在按下按钮时显示它