我有一张名为Post的表:
title (NULL), content, parent_id (NULL)
标题为空,因为我将此用于线程和回复(回复没有标题,线程没有父级)。
假设我想选择发布x的所有回复,或者n个回复:
SELECT * FROM post
WHERE title IS NULL
AND parent_id = x
,或者
SELECT * FROM post
WHERE title IS NULL
AND parent_id IS NOT NULL
LIMIT 0, 30
我如何选择回复标题?例如,如果我选择回复号码5并且它是对帖子ID#2的回复(即parent_id为2),我该如何选择号码2的标题?
我不想在mysql中使用foreach循环。
希望这是有道理的。
谢谢。
答案 0 :(得分:1)
假设您的Post表结构如下:
+-----+------------+-----------------+----------+
| id | parent_id | title | content |
+-----+------------+-----------------+----------+
| 1 | NULL | Post #1 Title | ... |
+-----+------------+-----------------+----------+
| 2 | NULL | Post #2 Title | ... |
+-----+------------+-----------------+----------+
| 3 | 1 | | ... |
+-----+------------+-----------------+----------+
| 4 | 2 | | ... |
+-----+------------+-----------------+----------+
您需要使用联接:
SELECT
*, parent.title AS parent_title
FROM
post
LEFT JOIN
post as parent ON parent.id = post.parent_id
WHERE
post.id = 4
这会选择帖子ID = 4,并且还会为您提供存储在字段parent_title
答案 1 :(得分:1)
COALESCE
返回非空的参数列表的第一个值。
SELECT post.content, COALESCE(post.title, parent.title) AS title
FROM post
LEFT JOIN post AS parent
ON post.parent_id = parent.id
WHERE post.parent_id = 123
答案 2 :(得分:1)
我会从你的帖子表加入你的帖子表。好有趣。 (这假设您的帖子表有一个id列,对应于parent_id)
SELECT child。*,parent.title FROM post child JOIN post parent ON(child.parent_id = parent.id)