如何使用MySQL Left Join根据另一个表行的id获取结果?

时间:2013-06-19 04:45:34

标签: php mysql join

我正在CodeIgniter中构建一个自定义论坛。我有四个主表:父类(类别),子(板),线程和消息(回复)。线程表仅包含第一条消息的线程ID,作者,标题,日期和ID。查看线程时,它会使用“first_msg_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.为什么会发生这种情况?洛尔。

搞定了。

2 个答案:

答案 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

答案 1 :(得分: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
         ";