2011-05-03 65 views
1

我有一個稱爲後表:選擇其他行的值:mysql的

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

你知道這是否會超過一個級別?正如已經討論的那樣,如果回覆只能添加到帶有標題的帖子(即不是另一個回覆),則單個加入可以解決您的問題。 – 2011-05-04 02:34:47

回答

1

假設你的帖子的表結構如下:

+-----+------------+-----------------+----------+ 
| 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,也讓你的文章ID的標題= 2存儲在該字段中parent_title

+0

'#1052 - where子句中的列'id'含糊不清' – jonnnnnnnnnie 2011-05-04 00:27:51

+0

已更新我的代碼以更正錯誤。 – stevecomrie 2011-05-04 02:28:30

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 
1

我會從您的張貼表加入您的張貼表。好有趣。 (這裏假設你的職位表有一個ID列,這相當於PARENT_ID)

SELECT孩子。*,parent.title從後子JOIN後父ON(child.parent_id = parent.id)