进入单个查询

时间:2013-07-02 18:15:43

标签: php mysql conditional-statements

我有一张桌子

 unam     fnam

 john     alex
 alex     john

如果unam'john'== fnam'alex'或unam'alex'== fname'john'

,我想要一个返回true的查询

我不知道如何在单个查询中执行此操作。 我的代码

$re = mysql_query("SELECT 1 FROM tab WHERE unam='john' and fnam='alex' LIMIT 1"); 
$ir = mysql_query("SELECT 1 FROM tab WHERE unam='alex' and fnam='john' LIMIT 1"); 

if ((!(mysql_num_rows($re))) && (!(mysql_num_rows($ir)))) echo 'not exists';

我已经执行了2个单独的查询(一个用于unam 'john' == fnam 'alex',另一个用于unam 'alex' == fname 'john',如果两个查询都没有任何行,则它不存在回声。

我在想可能是可以针对单个查询进行优化。

5 个答案:

答案 0 :(得分:5)

您可以执行OR条件检查多种不同的条件。

SELECT 1 
FROM tab 
WHERE (unam='john' and fnam='alex') 
    OR (fnam='john' and unam='alex') 
LIMIT 1

答案 1 :(得分:2)

您可以将逻辑放在where子句中,如下所示:

select 1
from tab
where (uname = 'john' and fname = 'alex') or
      (fname = 'alex' and uname = 'john')
limit 1

顺便说一句,如果您想要始终返回一个值,比如01,您可以使用聚合:

select coalesce(max(1), 0) as retval
from tab
where (uname = 'john' and fname = 'alex') or
      (fname = 'alex' and uname = 'john')

如果未选择任何行,则max()会返回NULL变为coalesce()的{​​{1}}。

答案 2 :(得分:2)

您可以使用 OR 语句来实现此目的。

试试这个:

mysql_query("SELECT 1 
FROM tab 
WHERE 
(unam='john' and fnam='alex') 
OR 
(unam='alex' and fnam='john')
limit 1");

答案 3 :(得分:1)

$re = mysql_query("SELECT COUNT(*) FROM tab WHERE (unam='john' and fnam='alex') OR (unam='alex' and fnam='john')");

答案 4 :(得分:1)

使用EXISTS和不同的语法只是一种不同的方法:

SELECT
  EXISTS (SELECT NULL FROM names
          WHERE (unam, fnam) IN (('john', 'alex'),('alex','john')))

请参阅小提琴here