変数が設定されていない場合、mysqlは条件を無視するようにしますか?mysqlが条件を無視するようにする
SELECT *
FROM foo
WHERE id = $id
AND bar = $baz
$ bazが通常どおり実行されるように設定されている場合は、AND句を除いたクエリを実行しますか?
おかげ
変数が設定されていない場合、mysqlは条件を無視するようにしますか?mysqlが条件を無視するようにする
SELECT *
FROM foo
WHERE id = $id
AND bar = $baz
$ bazが通常どおり実行されるように設定されている場合は、AND句を除いたクエリを実行しますか?
おかげ
SELECT *
FROM foo
WHERE id = $id
AND (bar = $baz OR $baz [equals null, empty string, zero, whatever])
MySQLは、これまでその実行計画でshort circuit evaluationを使用している場合、私は知りませんが、次のように、最初の安価な比較を置くことが有益であるかもしれない:
SELECT *
FROM foo
WHERE id = $id
AND ($baz [equals null, empty string, zero, whatever] OR bar = $baz)
することができます複数のパラメータでこの方法を使用します。
SELECT *
FROM foo
WHERE id = $id
AND ($baz [equals null, empty string, zero, whatever] OR bar = $baz)
AND ($x = 0 or x = $x)
AND ($y IS NULL OR y = $y)
-- etc.
ただ、変数$ ignoreWhereを作るとしてそれを書く:の残りの部分を無視するように1に設定しFOO $ ignoreWhere = 1またはID = $ IDから
SELECT *
をステートメント。
私は最初のところで質問を理解した方法ですが、彼はバーを持っていると思います...無視、id = – Nicolas78
はい。あなたはこのように、実際にあなたの変数の条件である条件を追加:
SELECT *
FROM foo
WHERE $baz is not null -- this condition tests if $baz is set
AND (
... -- all "normal" conditions, including any involving $baz
)
を$baz
が設定されていない場合は、他のすべての条件が
と$ bazがnullの場合はどうなりますか? –
@SergeiTulentsev '$ baz 'が' null'であることは不可能です。それが 'null'だった場合、OPの条件' AND bar = $ baz'は真ではありません( 'null'はSQLと同じではないとみなされません)。彼が 'ヌル 'をテストしたいのであれば、' AND bar IS NULL'という構文が必要で、別のクエリが必要です。 – Bohemian
私はあなたがその質問を誤解していると思います。受け入れられた答えをご覧ください。 –
$q = "SELECT ... id=$id "
if ($baz)
$q .= " AND bar = $baz";
をバイパスしている私は、これらはPHP変数であると仮定しますか?
Tim Medoraに感謝します。ソリューションが機能しました。 最初は明確ではありませんでしたが、私が使用したときは効果がありました。 これは物語です 以下を使用すると、$ yがNullのときにANDセクションをスキップするような動作になります。
AND ($y IS NULL OR y = $y)
$ yがnullの場合、それはそれはだから、これはAND節がWHERE句の残りの部分には影響を与えないことを意味
AND TRUE
を意味
AND(TRUE or y=$y)
であることを意味します。つまり、スキップされます。
ありがとう助け:) – Bob