1

2 つの「コンテンツ」テーブルと 1 つの「ユーザー」テーブルの結果を照会したいと考えています。

2 つのプライマリ コンテンツ ファイルのフィールド名は同じですが、フィールドが異なります。テーブルの 1 つは登録メンバーによるコメント用で、もう 1 つはゲストによるコメント用です。

「widgetID」は、コメントをループしようとしているウィジェットの主要な IDentification であると考えてください。同様に、「アクティブ」は、表示可能であることが承認されているかどうかを示す 0 または 1 です。

table_widget: id datetime usersID メッセージ アクティブ

table_member_comments: ID datetime widgetID usersID メッセージ アクティブ

table_guest_comments: id datetime widgetID usersName UsersEmail メッセージ アクティブ

テーブルユーザー:

id datetime usersID fullName アクティブ

だから私が理解しようとしてきたのは、両方のテーブルを一緒にクエリして、メンバーとパブリックコメントの両方をループして表示する 1 つの結果を得る方法です。

私はJOINを実行する必要があると確信しています.正しい手順に頭を悩ませようとしましたが失敗しました.

最初の SELECT を実行する必要があります ... 取得していない JOIN を使用して ... WHERE widgetID = ? AND u.active = '1' ORDER BY DateTime DESC LIMIT 0, 100

ここで私を微調整しているのは、真ん中のくそったれな部分です。誰かにこれを行う方法を教えてもらいたいです。ありがとう。

4

2 に答える 2

1

ここでは、結合は最適なオプションではありません。データを結合するのではなく結合する UNION を使用する必要があります。

例えば:

SELECT mydata.message FROM
(
SELECT datetime, message FROM table_member_comments WHERE widgetID = 100 AND active = 1
UNTION ALL
SELECT datetime, message FROM table_guest_comments WHERE widgetID = 100 active = 1
) mydata
ORDER BY mydata.datetime ASC
于 2013-03-31T18:13:08.297 に答える
1

UNION別のクエリの結果を同じ結果セットに追加するために使用します。

SELECT   a.*
FROM     (
         SELECT c.message, c.datetime, u.fullName
         FROM   table_member_comments c
         JOIN   table_users u ON c.usersID = u.usersID
         WHERE  c.widgetID = ? AND c.active = 1

         UNION ALL

         SELECT message, datetime, usersName
         FROM   table_guest_comments
         WHERE  widgetID = ? AND active = 1
         ) a
ORDER BY a.datetime DESC 
LIMIT    0,100
于 2013-03-31T18:13:34.330 に答える