2013-06-19 71 views
0

我正在CodeIgniter中構建一個自定義論壇。我有四個主要表格:父母(類別),孩子(板),線程和消息(回覆)。線程表只包含線程ID,作者,標題,日期和第一條消息的ID。當一個線程被查看時,它需要列「first_msg_id」來檢索線程的內容。如何使用MySQL Left Join根據另一個錶行的ID獲取結果?

我想創建一個查詢,獲取特定板中所有回覆的計數。基本上,任何與線程的first_msg_id字段不匹配的消息。以下是我迄今爲止:

 
$query = " 
        SELECT 
         m.message_id, m.thread_id 
         t.thread_id, t.first_msg_id 
        FROM forum_messages AS m 
         LEFT JOIN forum_threads AS t ON t.first_msg_id != m.message_id 
        WHERE t.child_id = ".$board_id." 
        ORDER BY m.message_id"; 

這是我得到的錯誤:

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 '.thread_id, t.first_msg_id FROM forum_messages AS m ' at line 3

這裏是我的表: enter image description here enter image description here

更新

好,所以現在我得到了我的查詢工作(嗯,修正了錯誤),它沒有做我想做的事情......我想我的邏輯錯了。我寫了一個腳本,在一塊板上創建了40個新線程。他們都沒有答覆。當我用我做的查詢使用mysql num行時,我得到了1560的結果。它應該返回0.爲什麼會發生這種情況?大聲笑。

得到它的工作。

回答

1

你缺少m.thread_id

喜歡的東西

SELECT 
    m.message_id, m.thread_id, 
    t.thread_id, t.first_msg_id 
FROM forum_messages AS m 
    LEFT JOIN forum_threads AS t ON t.first_msg_id != m.message_id 
WHERE t.child_id = ".$board_id." 
ORDER BY m.message_id 
+0

謝謝,這擺脫了錯誤,但現在我得到了完全不同的東西。檢查我對我的問題所做的修改 – ShoeLace1291

+0

其他消息如何與一個線程關聯? –

1

逗號後m.thread_id

失蹤,後逗號與嘗試 -

$query = "SELECT m.message_id, m.thread_id, t.thread_id, t.first_msg_id .... 

更合適 -

$query = " 
     SELECT 
     m.message_id, m.thread_id, 
           ^
     -------------------------| 
     t.thread_id, t.first_msg_id 
     FROM forum_messages AS m 
     LEFT JOIN forum_threads AS t ON t.first_msg_id != m.message_id 
     WHERE t.child_id = ".$board_id." 
     ORDER BY m.message_id 
     "; 
+0

謝謝,這擺脫了錯誤,但現在我得到了完全不同的東西。檢查我對我的問題所做的修改。 – ShoeLace1291

+0

@ ShoeLace1291可以請你澄清一點...從你的問題..query似乎對我來說.. ..我知道如果我錯過了一些零件..你可以在這裏粘貼一個設計模式或創建一個小提琴 – swapnesh

相關問題