2013-07-02 4 views
1

я получил таблицуВ одном запросе

unam  fnam 

john  alex 
alex  john 

Я хочу запрос, который возвращает истину, если НАУ «Джон» == fnam «Алекс» или НАУ «» == Alex имя_файла «Джон»

Я не знаю, как это сделать в одном запросе. Мой код

$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', если оба запросы не имеют ни одной строки, то Echos не существует.

Я думал, может быть, это может быть оптимизировано для одного запроса. может кто-нибудь мне помочь. Спасибо

ответ

5

Вы можете сделать OR условно для проверки нескольких различных условий.

SELECT 1 
FROM tab 
WHERE (unam='john' and fnam='alex') 
    OR (fnam='john' and unam='alex') 
LIMIT 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() превращается в 0.

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

Вы можете использовать ИЛИ заявление для достижения этой цели.

Попробуйте это:

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

+1 Спасибо @sumoanand – niko

1

Просто другой подход, с использованием EXISTS, и другой синтаксис:

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

Пожалуйста, смотрите скрипку here.

Смежные вопросы