我有一个名为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循环。
希望这有意义。
谢谢。
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
我将从您的post表加入到您的post表。这很有趣。(这里假设您的post表有一个id列,对应于parent_id)
选择孩子。*,父母。title FROM post child JOIN post parent ON (child.parent_id=parent.id)
假设您的Post表结构如下:
+-----+------------+-----------------+----------+
| id | parent_id | title | content |
+-----+------------+-----------------+----------+
| 1 | NULL | Post #1 Title | ... |
+-----+------------+-----------------+----------+
| 2 | NULL | Post #2 Title | ... |
+-----+------------+-----------------+----------+
| 3 | 1 | | ... |
+-----+------------+-----------------+----------+
| 4 | 2 | | ... |
+-----+------------+-----------------+----------+
需要使用join:
SELECT
*, parent.title AS parent_title
FROM
post
LEFT JOIN
post as parent ON parent.id = post.parent_id
WHERE
post.id = 4
这将选择post id=4并将post id=2的标题存储在字段parent_title