Mysql选择,如果输入参数相同则不返回任何行

时间:2014-12-12 01:32:43

标签: mysql input arguments

我需要运行一些奇怪的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!如果源和目标是相同的数字,我希望它不返回任何内容。 在某些情况下,某些行可能包含相同的数字,但这种情况发生在代码的不同部分中,在此特定选择中我希望它仅在源和目标不同时执行搜索。我查看了比较运算符,但那些似乎都在检查列中的值的参数,而不是反对参数的参数。

2 个答案:

答案 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;