[英]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.