2012-08-01 44 views
1

我在使用此查詢獲取有關不同表中的回覆數的論壇主題排序時遇到問題。我在左邊連接之前嘗試了這種方式,但在while循環中遺漏了一些數據。左邊加入後面的條目

SELECT forum_topics.*, COUNT(forum_posts.comment_id) AS replies 
FROM forum_topics 
WHERE forum_topics.subcat_id = '$subcatid' 
LEFT JOIN forum_posts 
ON forum_topics.topic_id=forum_posts.topic_num 
ORDER BY replies DESC 

它給了我這是一個錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'LEFT JOIN forum_posts ON 
forum_topics.topic_id=forum_posts.topic_num ORDER BY r' at line 1 

這是在之前的工作中查詢:

SELECT * FROM forum_topics WHERE subcat_id = '$subcatid' ORDER BY date DESC 

爲了呼應我使用:

$getChildCategory = mysql_query($query) or die(mysql_error()); 
$num = mysql_num_rows($get); 
if($num == 0){ echo 'No Posts';} 
else{ 
    while ($row = mysql_fetch_assoc($get)){ 

當回聲時,我只得到1個左邊的結果ñ但與舊的我得到了2,這是我的預期。

+1

你不應該在新應用程序中使用mysql_query,因爲它太危險了。改用PDO或'mysqli'。請使用[正確的SQL轉義](http://bobby-tables.com/php)。 – tadman 2012-08-01 16:39:02

回答

6

這是因爲子句的順序是錯誤的。

這是正確的語法(每評論EDITED下面):

SELECT `forum_topics`.*, COUNT(`forum_posts`.`comment_id`) AS `replies` 
FROM `forum_topics` 
LEFT JOIN `forum_posts` 
ON `forum_topics`.`topic_id` = `forum_posts`.`topic_num` 
WHERE `forum_topics`.`subcat_id` = '$subcatid' 
GROUP BY `forum_posts`.`topic_num` 
ORDER BY `replies` DESC 

當你執行任何類型的JOIN,爲您營造一種「虛表」的是所有表中涉及的合併。 Where子句在這個「虛擬表」上運行,所以如果你仔細想一想,在創建這個表之後WHERE子句纔有意義。

+0

閱讀我的文章,請我已經嘗試過,但它只提取一些數據 – kezi 2012-08-01 16:15:36

+2

然後你的查詢是不正確的。讓你的語法無效不會改變任何東西。 – 2012-08-01 16:16:10

+0

也許你想要一個'OUTER JOIN'? – paddy 2012-08-01 16:16:52