0

現在、以下のスクリプトを使用しています。

$query = mysql_query("SELECT * FROM `venues` as table1

LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id

WHERE table2.user_id = $userid");

テーブルには次のフィールドがあります。

表1:

id、venue_id、user_id...

表 2:

id、venue_id、user_id...

上記のクエリは 5 つのレコードを返します。

今....

上記のスクリプト Table3 に 3 番目のテーブルを追加する必要があります

表 3 のフィールドには、id、venue_id、user_id も含まれています。しかし、スクリプトの WHERE には含まれていません。

上記のスクリプトに LEFT JOIN を追加して、次のような 3 番目のテーブルを追加しようとしました。

$query = mysql_query("SELECT * FROM `venues` as table1

LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id

LEFT JOIN `stats` as table3 on table1.venue_id = table3.venue_id

WHERE table2.user_id = $userid");

Stats テーブルには 1 つのレコードのみが含まれます。

さて、私の問題は、上記のクエリが、1つのレコードだけでなく、すべてのレコードのデータをエコーし​​ていることです。

私の質問は...私が追加した行で私が間違っていること:

statstable1.venue_id = table3.venue_id の table3 としてLEFT JOIN ?

4

4 に答える 4

1

table3 に null 以外のレコードがある table1 のレコードのみを含めたい場合は、LEFT JOIN ではなく INNER JOIN を使用する必要があります。JOINについては、MySQL のドキュメントを参照してください。

$query = mysql_query("SELECT * FROM `venues` as table1

table1.venue_id = table2.venue_id の table2 として LEFT JOIN `follows`

table1.venue_id = table3.venue_id の table3 としての INNER JOIN `stats`

WHERE table2.user_id = $userid");

「INNER」は明示的に必要ありません。結合はデフォルトで INNER 結合です

于 2013-08-13T15:41:04.213 に答える
0

レコードをまったく制限していません。代わりにこれを使用してください:

$query = mysql_query("SELECT * FROM `venues` as table1

LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id

LEFT JOIN `stats` as table3 on table1.venue_id = table3.venue_id

WHERE table2.user_id = $userid AND table3.venue_id IS NOT NULL");
于 2013-08-13T15:37:50.977 に答える