Можно ли 4 запроса превратить в один

Acabar

Новичок
Можно ли 4 запроса превратить в один

Здраствуйте уважаемые коллеги!

У меня возникла следующая проблема.
есть код с запросом mysql:
PHP:
$sql->query("SELECT имя FROM жывотные WHERE тип = 'медвед'");
if ( $sql->numRows() < 1 ) // В данном случае больше чем 1 никак не может быть. Во всех других случаях тоже самое.
{
     $sql->query("SELECT имя FROM жывотные WHERE особености = 'превед'");
     if ( $sql->numRows() < 1 )
     {
           $sql->query("SELECT имя FROM жывотные WHERE язык = 'русский'"); 
           if ( $sql->numRows() < 1 )
          {
                     $sql->query("SELECT имя FROM жывотные WHERE поУмолчанию = '1'"); 
           }
      }
}
$info = $sql->getResult(0,0);
// дальше обрабатыеваем данные, так как хоть один из этих запросов обязательно вернёт значение и обязательно оно должно быть одно
Вопрос вот в чём, можно ли эти 4 запроса объединить в 1?
 

Acabar

Новичок
никак не подходит. Здесь AND не причём

то есть если мы не нашли `тип`, то ищем по `особеностям`, но когда ищем по `осбенностям` и если нашли то `тип` может быть уже совсем другой...а если не нашли идём дальше...Так что AND никак не подходит.
 

alexhemp

Новичок
Acabar

Можно попробовать поизвращаться с условями OR, сортировкой и LIMIT 1
 

Acabar

Новичок
то есть?
если я сделаю запрос:

PHP:
"SELECT имя FROM жывотные WHERE тип = 'медвед' OR особенности = 'превед' OR язык = 'русский' OR поУмолчанию = '1' LIMIT 0,1";
То как я узнаю какое значение было первым? Что мне делать если он нашёл по указанному `типу` и указанному `языку`данные и вернул значение по языку, когда нужно значение по столбцу `тип` так как по заданым параметрам типа тоже нашлись данные.
 

alexhemp

Новичок
Acabar

Ты попробуй. Убери сперва лимит и экспериментируй.

И потом я же написал - ORDER BY,
подсказка - можно написать
ORDER BY тип='медвед' DESC
и сортировать можно по нескольким параметрам.

Только убедись что это будет быстрее, посмотри EXPLAIN.
 

Acabar

Новичок
Не, не получаеться ничего, сортировка никак не поможет..да вообщем ниважно, пускай будит так как есть...
 

antson

Новичок
Партнер клуба
union не пробывали ?

select имя , 1 as prioritet from ...
union select имя , 2 from ...
union select имя , 3 from ...
union select имя , 4 from ...
order by prioritet limit 0,1
 

Фанат

oncle terrible
Команда форума
как будто юнион - это преврашение 4-х запросов в один
 

Andreika

"PHP for nubies" reader
PHP:
mysql_query("SELECT (

CASE WHEN тип= 'медвед'
THEN 1 
WHEN особенности = 'превед'
THEN 2 
WHEN чего-то = 'чему-то'
THEN 3 
END 
) AS p, жывотное. * 
FROM `жывотное` 
WHERE тип='медвед' OR особенность='превед' OR чего-то='чему-то' ORDER BY p
LIMIT 1 ");
гы )
[ sql ] работать не хотит блин..
 
Сверху