0

CodeIgniter でカスタム フォーラムを構築しています。親 (カテゴリ)、子 (ボード)、スレッド、およびメッセージ (返信) の 4 つのプライマリ テーブルがあります。スレッド テーブルには、スレッド ID、作成者、タイトル、日付、および最初のメッセージの ID のみが含まれます。スレッドが表示されると、スレッドの内容を取得するために列「first_msg_id」が必要になります。

特定のボードのすべての返信の数を取得するクエリを作成したいと思います。基本的に、スレッドの first_msg_id フィールドに一致しないメッセージ。これが私がこれまでに持っているものです:

$クエリ = "
                    選択する
                        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";

これは私が得ているエラーです:

SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、3 行目の '.thread_id, t.first_msg_id FROM forum_messages AS m ' の近くで使用する正しい構文を確認してください。

ここに私のテーブルがあります: ここに画像の説明を入力 ここに画像の説明を入力

アップデート

さて、クエリが機能するようになったので(まあ、エラーを修正しました)、やりたいことをしていません...ロジックが間違っていると思います。1 つのボードに 40 個の新しいスレッドを作成するスクリプトを作成しました。それらのどれも返信がありません。作成したクエリで mysql num rows を使用すると、1560 という結果が返されます。0 が返されるはずです。笑。

動作しました。

4

2 に答える 2

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
于 2013-06-19T04:47:43.273 に答える
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
         ";
于 2013-06-19T04:47:51.087 に答える