0

現在、次のクエリが機能しています。

$sql = $db->Query("SELECT a.id FROM surf a LEFT JOIN users b ON b.id = a.user LEFT JOIN surfed c ON c.user = '".$data['id']."' AND c.site = a.id WHERE a.active = '0' AND (b.coins >= a.cpc AND a.cpc >= '2') AND (c.site IS NULL AND a.user !='".$data['id']."')".$dbt_value." ORDER BY a.cpc DESC LIMIT 1");

しかし、それに次の AND ステートメントを追加したいと思います。

 AND `cpc`<='10' AND (`id` NOT IN (SELECT `site` FROM `surfed_site`)) 

だから私はそれを次のようにしました:

$sql = $db->Query("SELECT a.id FROM surf a LEFT JOIN users b ON b.id = a.user LEFT JOIN surfed c ON c.user = '".$data['id']."' AND c.site = a.id WHERE a.active = '0' AND (b.coins >= a.cpc AND a.cpc >= '2') AND `cpc`<='10' AND (`id` NOT IN (SELECT `site` FROM `surfed_site`)) AND (c.site IS NULL AND a.user !='".$data['id']."')".$dbt_value." ORDER BY a.cpc DESC LIMIT 1");

しかし、次のメッセージが表示されます。

IN/ALL/ANY サブクエリの列 'id' があいまいです

クエリの何が問題になっていますか?

4

4 に答える 4

6

変更してみる

AND `cpc`<='10' AND (`id` NOT IN (SELECT `site` FROM `surfed_site`)) 

AND `cpc`<='10' AND (`a.id` NOT IN (SELECT `site` FROM `surfed_site`)) 

どのテーブルa.idのどの列を参照すればよいかわからないため、必要です。id

于 2013-02-23T15:45:54.863 に答える
1

そのエラーの理由は、 column を含むテーブルが複数あるためIDです。クエリを実行するにはID、サーバーが関連するテーブルを識別するために、列が存在するテーブルを提供する必要があります。

AND `cpc`<='10' AND (a.`id` NOT IN (SELECT `site` FROM `surfed_site`)) 

ID比較しているのがテーブルからのものであることを意味する場合surf

于 2013-02-23T15:46:06.977 に答える
1

必要なものを指定する必要がありますid。などa.id_b.id

于 2013-02-23T15:47:29.700 に答える
0

また、 $data にはエスケープされたデータ (一重引用符) が含まれていると思いますか? そうでない場合、それは2番目の問題です。

于 2013-02-23T15:50:15.740 に答える