我需要运行一些奇怪的mysql查询。
我将两个参数传递给WHERE子句,$ source和$ destination(通过php)。如果$ source和destination是相同的数字,我希望mysql只返回任何内容。否则,在数据库中执行查找并拉出记录。
查询:
SELECT count(id) AS count
FROM approval
WHERE source=1 AND destination=2 AND approved!=0
现在这将返回source为1且destination为2的所有行。
BUT!如果源和目标是相同的数字,我希望它不返回任何内容。 在某些情况下,某些行可能包含相同的数字,但这种情况发生在代码的不同部分中,在此特定选择中我希望它仅在源和目标不同时执行搜索。我查看了比较运算符,但那些似乎都在检查列中的值的参数,而不是反对参数的参数。
答案 0 :(得分:0)
这将是一个简单的问题:
and source <> destination
在查询中。这将排除列相同的行,由于其他子句,这意味着您提供的参数也是相同的。
这可能仍会 out 到数据库,但它保证返回零计数(假设当然没有NULL - 如果你想处理那些,你&#39;我需要IS [NOT] NULL
)的额外条款。如果你的两个参数是相同的,你甚至不想去数据库,那么通过事先比较参数,你的PHP代码就可以了。
举例来说,以下DDL:
create table xyzzy (a int, b int);
insert into xyzzy (a,b) values (1,1);
创建一个包含一行的表。执行查询时:
SELECT count(a) AS x FROM xyzzy WHERE a = 1 AND b = 1;
SELECT count(a) AS x FROM xyzzy WHERE a = 1 AND b = 1 and a <> b;
您将获得行1
(相当于您目前拥有的行)和0
(相当于我提议的更改)。
如果确实想要使用参数而不是列,那么这也会有效:
SELECT count(a) AS x FROM xyzzy WHERE a = 1 AND b = 1 and 1 <> 1;
这也会返回零计数,相当于只增加:
and $source <> $destination
到你的查询。如果这两个数字相同,则会归结为and false
,这将导致计数为零。
以下任何一个:
and source <> $destination
and $source <> destination
就此而言。
答案 1 :(得分:0)
我认为这个查询可以做你想要的事情
SELECT count(id) AS count
FROM approvals
WHERE source = $source AND destination = $destination AND approved <> 0
HAVING $source <> $destination;