php - MySQL - 按不同标准对帖子/评论进行排序和分组
问题描述
我有一个 SQL 语句,它按发布时间的顺序对评论进行排序,并将子回复分组到父评论。
|- Comment 1 (Oldest)
|- Sub Comment (Sub Oldest)
|- Sub Comment
|- Sub Comment (Sub Newest)
|- Comment 2 (Newest)
查询如下
SELECT
*
FROM feed_comments c
WHERE c.feed = 50
GROUP BY c.id
ORDER BY
IF(c.parent_id IS NULL, c.id, parent_id),
c.time ASC
我想修改查询以仍然以相同的方式对评论进行分组但是我希望主要评论是 NEWEST 到 OLDEST 并保持子回复 OLDEST 到 NEWEST
|- Comment 1 (Newest)
|- Sub Comment (Sub Oldest)
|- Sub Comment
|- Sub Comment (Sub Newest)
|- Comment 2 (Oldest)
我一直在玩 IF 和 CASE 语句的许多不同组合,但似乎找不到正确的解决方案!
解决方案
您的查询未引用日期/时间列,因此我必须猜测您如何表示“最新”。让我猜猜这指的是更大的ID。
您还可以使用 简化表达式coalesce()
。
SELECT c.*
FROM feed_comments c
WHERE c.feed = 50
GROUP BY c.id
ORDER BY coalesce(c.parent_id, c.id) desc,
c.time ASC
推荐阅读
- typescript - 在打字稿游乐场中找不到名称“HTMLAttributes”。(2304)
- ruby-on-rails - 为什么我的 sidekiq 计划的 cron 作业没有在 heroku 上运行?
- php - mysqli_real_escape_string 在这个例子中是否提供了足够的保护?
- java - 给定一个大小为 N 的排序数组 Arr 和一个数字 X,您需要找到 X 在 Arr 中出现的次数
- android - Android Studio 的 Android Firebase 构建失败。从 bash 手动构建正在工作
- sql-server-2008 - 错误的编译常数值 || 即时特定错误
- android - 是否可以在 XMPP Smack 库中手动处理消息节?
- css - Safari上的CSS翻转卡闪烁和损坏的滚动
- reactjs - 访问 getFieldDecorator antd 3x
- javascript - 将此基于 Promise 的代码转换为 Async / Await?