如果未设置变量,是否让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