2014-07-09 93 views
0

基本上就是我想要做的是限制我的查詢MySQL的左連接限制如預期

我下面的查詢我至5%的響應意見

SELECT comments.id, comments.comment, 
replies.id reply_id, replies.comment_id, replies.reply 
FROM comments 
LEFT JOIN (SELECT id FROM replies LIMIT 3) replies 
ON comments.id = replies.comment_id 
WHERE comments.user_id = ? ORDER BY comments.id DESC LIMIT 3 

$comments = array(); 
$comm_replies = array(); 

while($row = $query->fetch(PDO::FETCH_ASSOC)) { 

$comm_id = $row['id']; 
$comm_user_id = $row['user_id']; 
$comm = $row['comment']; 

if (empty($row['reply_id'])) { 
    continue;  
} 

$comments[$comm_id] = $comm; 
$comm_replies[$comm_id][] = $row; 
} 

foreach ($comments as $comm_id => $comm) { 
echo "comment - $comm\n"; 
if (!isset($comm_replies[$comm_id])) { 
    continue; 
} 

$prefix = '---'; 
foreach ($comm_replies[$comm_id] as $reply_id => $row) { 
    echo "$prefix $row['reply_id'], $row['reply']\n"; 
    $prefix .= '-'; 
} 
} 

所以不工作我「M試圖輸出如下:

1.Question一個
---第一反應
---第二次迴應
---第三響應

2.Question兩個
---第一反應
---第二次迴應
---第三響應

3.Question三
---第一反應
---第二次迴應
---第三響應

而是我所得到的是這樣的:

1.Question一個
---第一反應
---第二次迴應

我不知道爲什麼它出來不僅僅是使用第一個問題和2個迴應。

感謝您提前提供任何幫助。

回答

0

你的查詢是錯誤的:

LEFT JOIN (SELECT id FROM replies LIMIT 3) replies 

您必須是具體的,在一個外殼定義這些研究結果的參數,其中,

LEFT JOIN (SELECT a.id FROM replies a WHERE ... 
+0

感謝您的快速反應@gpupo但是,我不跟着你...你的意思是這樣...左連接(選擇*從答覆WHERE comments.id = answers.comment_id極限3),因爲這不適用於我 – Benjamin