gpt4 book ai didi

mysql - SQL 语法如何显示相关行?

转载 作者:行者123 更新时间:2023-11-29 22:00:45 25 4
gpt4 key购买 nike

我有一个用于保存用户评论的表格。它是这样的:

╔══════╦════════════╦═════════════════╦══════╦════════╗
║ ID ║ Name ║ Comment ║ Re ║ Time ║
╠══════╬════════════╬═════════════════╬══════╬════════╣
║ 1 ║ Jack ║ Nice Movie! ║ 0 ║ 8:12 ║
║ 2 ║ Smith ║ Agree With That ║ 1 ║ 8:30 ║
║ 3 ║ Bob ║ Terrible ║ 0 ║ 10:15 ║
║ 4 ║ Bill ║ Yep ║ 1 ║ 8:22 ║
║ 5 ║ Will ║This Movie Rocks ║ 4 ║ 9:31 ║
╚══════╩════════════╩═════════════════╩══════╩════════╝

我希望它是这样的:

╔══════╦════════════╦═════════════════╦══════╦════════╗
║ ID ║ Name ║ Comment ║ Re ║ Time ║
╠══════╬════════════╬═════════════════╬══════╬════════╣
║ 1 ║ Jack ║ Nice Movie! ║ 0 ║ 8:12 ║
║ 4 ║ Bill ║ Yep ║ 1 ║ 8:22 ║
║ 5 ║ Will ║This Movie Rocks ║ 4 ║ 9:31 ║
║ 2 ║ Smith ║ Agree With That ║ 1 ║ 8:30 ║
║ 3 ║ Bob ║ Terrible ║ 0 ║ 10:15 ║
╚══════╩════════════╩═════════════════╩══════╩════════╝

如您所见,第一条评论是回复 0 并按时间排序的,而回复另一条消息的其他评论则放在它们下面并按时间排序。

我怎样才能实现这样的目标?提前致谢。

编辑1:我有三个表:用户评论帖子,使用这些查询创建:

用户表

CREATE TABLE users(UID INT PRIMARY KEY, UName TEXT);

UID:用户的 ID

UName:用户名

帖子表

CREATE TABLE posts(PID INT PRIMARY KEY, PTitle TEXT, PBody TEXT, PDate DATETIME);

PID:帖子的 ID

PTitle: 保存帖子的标题

PBody:帖子内容

PDate:帖子撰写日期

评论表

CREATE TABLE comments(CID INT PRIMARY KEY, UID INT, PID INT, Comment TEXT, Reply INT, CDate DATETIME);

CID:评论 ID

UID:评论此评论的用户 ID

PID:与此评论相关的帖子 ID

评论:评论文本

回复:此评论被回复的评论 ID

CDate:发送评论的日期

最佳答案

你没有说你是否想要分层显示,可以在其中回复回复等。这在纯MySQL中是一个令人头疼的问题。如果您需要以某种方式构建 Re 列作为到父级的路径,那么您最好。 (或者使用能够查询层次结构的 dbms。)

假设一级评论/回复显示已经足够好了,你可以尝试一下。 (http://sqlfiddle.com/#!9/1b51ad/5/0)。它将您的 Re 列(对于线程的原始注释为零)转换为 Thread 列。然后它按线程排序,并在线程内按时间戳排序。这看起来很有用。

select case when re = 0 then id else re end thread,
id, name, comment, re time
from cmnt
order by thread , time

关于mysql - SQL 语法如何显示相关行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com