Имя: Пароль:
IT
Админ
mysql если не сработало одно условие, тогда другое условие
0 D_Pavel
 
08.09.15
13:55
Нужно сделать такой запрос, который проверяет одно условие, и если оно ложь, тогда проверяет другое. Пример:

SELECT * FROM kladr WHERE city='Москва' ELSE WHERE phone='113-321'

то есть в примере если не нашли запись по городу, то ищем по номеру телефона.

А теперь самое главное: Как это сделать?
1 ДенисЧ
 
08.09.15
13:56
select * from kladr  where city='москва'
union all
select * from kladr  where city<>'москва' and phone='123-456'
2 Ёпрст
 
08.09.15
13:59
или через case в условии
3 kosts
 
08.09.15
13:59
(0)
А так?


SELECT * FROM kladr WHERE city='Москва' or phone='113-321'
4 D_Pavel
 
08.09.15
14:00
(1) Так не пойдет. Выберет и то, и другое если есть.
(3) Аналогично.
5 ДенисЧ
 
08.09.15
14:01
(4) тогда приведи пример на даннызх
6 D_Pavel
 
08.09.15
14:02
(2) в case нельзя применить like:

SELECT * FROM kladr WHERE city LIKE '%Москва%' ELSE WHERE phone LIKE '%113-321%'
7 Принт
 
08.09.15
14:03
city='Москва' or city<>'Москва' and phone='113-321'
8 D_Pavel
 
08.09.15
14:03
(5) Ставрополь 113-321
Москва 5646-654

Должна выбраться только вторая строка
9 ДенисЧ
 
08.09.15
14:04
(8) с чего бы? Под твоё условие в (0) твой ответ не подходит
10 b_ru
 
08.09.15
14:04
SELECT * FROM kladr WHERE city LIKE '%Москва%' OR (phone LIKE '%113-321%' AND not (city LIKE '%Москва%'))
11 Принт
 
08.09.15
14:05
(9) Он сам не знает чего хочет.
12 ДенисЧ
 
08.09.15
14:05
(11) Я ему это пытаюсь намекнуть...
Пока не доходит...
13 kosts
 
08.09.15
14:08
(8) Тогда надо соединение

(11) Возможно целиком по таблице имеет ввиду
14 Ёпрст
 
08.09.15
14:16
(6) еще как можно
15 Принт
 
08.09.15
14:17
Мб добавить приоритет и брать максимальное?
16 Ёпрст
 
08.09.15
14:17
если по вспей таблице, то интерсект того, что в (1)
17 D_Pavel
 
08.09.15
17:09
(9) Подходит. Это под условие которое у тебя в голове он не подходит.
18 D_Pavel
 
08.09.15
17:10
(11) По себе не суди. Я знаю чего хочу.
19 D_Pavel
 
08.09.15
17:12
(12) Сам сначала разберись чтобы мне намекать. Похоже Ёпрст - единственный кто понял вопрос.
20 D_Pavel
 
08.09.15
17:14
(14) как это сделать?
21 Garykom
 
гуру
08.09.15
17:16
как я люблю любителей запросов в цикле...
22 ДенисЧ
 
08.09.15
17:16
(18) Может, и знаешь, но страдаешь собачьей болезнью.
23 Garykom
 
гуру
08.09.15
17:17
а вообще сложно в 1 добавить DISTINCT ?
24 D_Pavel
 
08.09.15
17:17
(21) А я люблю любителей писать не по теме.
25 Ненавижу 1С
 
гуру
08.09.15
17:18
SELECT TOP 1
...

ORDER BY
CASE
WHEN city='Москва' THEN 1
WHEN phone='113-321' THEN 2
ELSE 100500
END
26 D_Pavel
 
08.09.15
17:21
(25) вроде сгодится
27 Garykom
 
гуру
08.09.15
17:23
(24) вообще то четко по теме

select DISTINCT * from
(select * from kladr  where city='москва'
union all
select * from kladr  where city<>'москва' and phone='123-456')
28 Ёпрст
 
08.09.15
17:24
ну, тип того
  where case when city like '%Москва%' then 'вася'
             when  phone like '%113-321%' then 'вася'
else 'маша' end = 'вася'
29 D_Pavel
 
08.09.15
17:55
(27) Разве выберет только вторую строку из (8)?
30 D_Pavel
 
08.09.15
17:55
(28) сам понял уже, но все равно спасибо