如果未設置變量,是否讓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並把它寫爲:
SELECT * FROM foo其中$ ignoreWhere = 1或ID = $ ID
將其設置爲1忽略的休息聲明。
這就是我首先了解這個問題,但我想他想和AND欄被忽略,而不是id = – Nicolas78 2011-12-25 19:02:46
是的。你添加一個條件,實際上是對你的變量條件,就像這樣:
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 IS爲null? – 2011-12-25 19:02:45
@SergeiTulentsev'$ baz'不可能是'null'。如果它是'null',那麼OP的條件'AND bar = $ baz'不會**爲真(SQL不認爲'null'等同於'null')。如果他想測試'null',他需要語法'AND bar IS NULL',它需要一個不同的查詢。 – Bohemian 2011-12-26 08:22:24
我想你誤解了這個問題。看到接受的答案。 – 2011-12-26 08:54:56
$q = "SELECT ... id=$id "
if ($baz)
$q .= " AND bar = $baz";
我認爲這些都是PHP變量?
感謝Tim Medora。您的解決方案奏效 我一開始並不清楚,但是當我用它工作。 因此,這裏是故事 如果您使用以下內容,則當$ y爲空時,它就像滑動AND部分一樣。
AND ($y IS NULL OR y = $y)
如果$ y爲null,則意味着它是
AND(TRUE or y=$y)
這意味着
AND TRUE
因此,這意味着和第對WHERE子句的其餘部分沒有影響。換句話說,它被跳過了。
謝謝,幫助:) – Bob 2011-12-25 21:06:59