IN
句が空のSQLクエリを実行するとどうなりますか?例えばMySQLの空のIN節パラメータリスト
:動的IN
句を構築する場合、予想通り
SELECT user WHERE id IN();
MySQLは(それは常に、偽である)これを処理し、そうでない場合は、どのように私のアプリケーションは、このケースを扱うことができますか?
IN
句が空のSQLクエリを実行するとどうなりますか?例えばMySQLの空のIN節パラメータリスト
:動的IN
句を構築する場合、予想通り
SELECT user WHERE id IN();
MySQLは(それは常に、偽である)これを処理し、そうでない場合は、どのように私のアプリケーションは、このケースを扱うことができますか?
有効な構文を使用して、クエリの最も近い近似値は次のとおりです。無条件に空の結果セットを返します
SELECT user FROM tbl1 WHERE id IN (SELECT id FROM tbl1 WHERE FALSE);
。ブラケットのサブクエリは常に空のセットを返します。空のセットには値が含まれていないので、前述したように空のセットには値はありません。
私がIN
リストを動的に構築しているアプリケーションがあり、それが空になることがある場合、時には不可能な値でリストを初期化して追加することがあります。例えば。それがユーザ名のリストであれば、可能なユーザ名ではないので空の文字列で始めます。 auto_increment IDの場合、実際の値は常に正であるため、-1を使用します。
不可能な値がないため実行できない場合は、AND column IN ($values)
式をWHERE
句に含めるかどうかを条件付きで判断する必要があります。
あなたはちょうどそうのような条件を設定できます。
$condition = 'FALSE' // Could feasibly want TRUE under different circumstances
if($values){
$condition = *dynamically_generate_IN_condition_from_values*
}
$sql = 'SELECT * FROM `user` WHERE '.$condition;
これは、同様に私に0の結果を与える:MYSQL 5.6
これは、 'id IN(NULL)'が 'FALSE'ではなく' NULL'に評価されるので問題になる可能性があります。これは主に 'NOT IN'の問題です:' SELECT id FROMユーザはどこにいないのですか(NULL); 'は0の結果も返します。 – MicahStetson
試着
SELECT id FROM User
WHERE id IN (NULL);
は常に虚偽の陳述
を使用しますSQLを作成する前に、配列のサイズを確認してください。 サイズはのように、1 = 2
としてどこ文を生成し、0の場合:
SELECT * FROM USERS WHERE name in()
でいつものように真のステートメントを生成し、空の配列に "NOT IN" のために
SELECT * FROM USERS WHERE 1 = 2
次のようになります。
SELECT * FROM USERS WHERE name not in()
は
SELECT * FROM USERS WHERE 1 = 1
なり、
ように、これは、より複雑なクエリのために働く必要があります。配列が空の場合は、idのAUTO_INCREMENT(1,2,3、...)を使用している場合
SELECT * FROM USERS WHERE (name in() OR name = 'Alice')
が
SELECT * FROM USERS WHERE (1 = 2 OR name = 'Alice')
になりますが、アイテム[0]を1つ追加できます。したがって、それはなります
if (empty($arr)) {
$arr[] = 0;
}
SELECT user WHERE id IN (0);
そして、mysqlの解析エラーはありません。
自分で試してみませんか? –
空のセットには何もないので、idカラムの値は明らかに空のセットにはありません。また、構文が正しくないことが判明しました。 http://sqlfiddle.com/#!2/a2581/2412 –
私はこれを聞いても構いませんが、すでにここで見つけるのが便利でした。 –