我有一张桌子
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'
,如果两个查询都没有任何行,则它不存在回声。
我在想可能是可以针对单个查询进行优化。
答案 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
顺便说一句,如果您想要始终返回一个值,比如0
或1
,您可以使用聚合:
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。