从另一行选择值:mysql


Selecting a value from another row: mysql

我有一个名为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