我有用于保留用户评论的表格。这就是它的样子:
╔══════╦════════════╦═════════════════╦══════╦════════╗
║ 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:发送日期评论
答案 0 :(得分:0)
你没有说你是否想要一个分级显示,它可以回复回复等等。这在纯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