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

Mysql select,如果输入参数相同,则不返回任何行,mysql,input,arguments,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 现在,这将返回源为1、目标为2的所有行 但是!如果源和目标是相同的

我需要运行一个奇怪的mysql查询

我将两个参数传递给WHERE子句,$source和$destination(通过php)。如果$source和destination是相同的数字,我希望mysql不返回任何内容。否则,在数据库中查找并提取记录

查询:

SELECT count(id) AS count
FROM approval
WHERE source=1 AND destination=2 AND approved!=0
现在,这将返回源为1、目标为2的所有行

但是!如果源和目标是相同的数字,我希望它不返回任何内容。
在某些情况下,某些行可能包含相同的数字,但这发生在不同的代码中,在这个特定的select中,我只希望它在源和目标不同时执行搜索。我查看了比较运算符,但它们似乎都是针对列中的值检查参数,而不是针对参数检查参数。

这将是一个简单的问题,包括:

and source <> destination
创建一个包含一行的表。执行查询时:

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;
这也会返回一个零计数,相当于仅定位:

and $source <> $destination

就这点而言。

我认为这个查询符合您的要求

SELECT count(id) AS count
FROM approvals
WHERE source = $source AND destination = $destination AND approved <> 0
HAVING $source <> $destination;
选择计数(id)作为计数
从批准
其中source=$source和destination=$destination且已批准0
具有$source$destination;

不太可能。这将导致计数为0,而不是不返回任何行。@Gordon,这取决于操作的意图,目前尚不清楚。它们声明它返回行,但在没有分组子句的情况下,
count
无法返回多行。我把它理解为只是从“underquery”中不返回任何行,导致聚合时计数为零。本质上,我希望“count”为0。我试过$source=$目标(同时使用!=和方法)。我不知道是否有,但这似乎没有任何作用,因为它仍然将count设置为1。我正在尝试基本上进行检查,因为我使用此查询将假表列表(通过as命令)返回到php,其中包含0或1。每个0或1都是我的应用程序检查的各种条件的结果。此计数的一个用途是确保不添加源和目标为真的记录(如果它返回1,php可以检查并跳过一个部分或代码,或者返回一个警告,知道用户正在尝试插入一条我不希望他插入的记录,因为它已经存在。如果它是0,只需继续处理代码的下一部分,因为它还没有完成).@Mark,
拥有
不会给你一个零计数,它会给你一个没有行的记录集。我建议你重新阅读我答案中的
子句,
目的地
是列名,而不是PHP变量-换句话说,去掉
$
。我会在答案中澄清。这是从您的问题中不清楚PHP提供了查询的哪些部分。您不能在where子句中添加一个额外的术语:
和(source!=destination)
通过“不返回任何内容”,您的意思是“不返回任何行”?还是这对您意味着其他内容?
选择count()
将始终返回1行,即使值为零。@HoboSapiens…如果您有
having
子句,则不会返回。@GordonLinoff不知道。ThanksIt不起作用…我认为此查询符合您的要求选择计数(id)作为来自批准的计数,其中source=2,destination=2,批准的0有2;如果源和目标为2的行存在,它仍然返回计数1,即使我们尝试指定有22。似乎忽略了这一点?Mark,这与Gordon的情况相同,他使用PHP参数指示计数是否返回我认为这不是您想要的(您似乎要求的是计数为零的单行,而不是一行也没有)但是,如果我弄错了,那么这样就可以了。我想我在语句的其他地方弄错了,如果使用简单的表再次尝试,当两个变量相同时,似乎会导致计数为0。我感谢反馈,我想我只是在某个地方弄错了
and $source <> $destination
and source <> $destination
and $source <> destination
SELECT count(id) AS count
FROM approvals
WHERE source = $source AND destination = $destination AND approved <> 0
HAVING $source <> $destination;