簡體   English   中英

從另一行中選擇一個值:mysql

[英]Selecting a value from another row: mysql

我有一個名為 Post 的表:

title (NULL), content, parent_id (NULL)

標題是 null,因為我將它用於線程和回復(回復沒有標題,線程沒有父級)。

假設我想 select 對帖子 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

我怎么也可以 select 回復標題? 例如,如果我 select 回復編號為 5,它是對帖子 id#2 的回復(即 parent_id 為 2),我怎么能 select 編號為 2?

我不想在 mysql 中使用 foreach 循環。

希望這是有道理的。

謝謝你。

假設您的 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

這將 select 帖子 id=4 並讓您獲得存儲在字段parent_title中的帖子 id=2 的標題

COALESCE返回不是 null 的參數列表的第一個值。

   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 表有一個 id 列,對應於 parent_id)

SELECT child.*, parent.title FROM post child JOIN post parent ON (child.parent_id=parent.id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM