Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / IF ELSE в MySQL / 11 сообщений из 11, страница 1 из 1
08.02.2014, 21:59:30
    #38554651
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Ни разу не сталкивался, подскажите возможно ли такое реализовать и как)

есть 2 запроса

Код: sql
1.
2.
select * from table where name='temp';
select * from table where name like '%temp%';



если первый запрос что то возвращает то то отдаем эту выборку, если же нет то выборку по второму запросу.


Код: sql
1.
2.
3.
select if ((select count(*) from table where name='temp') > 0, 
(select * from table where name='temp'), 
(select * from table where name like '%temp%'));



что то типа такого? Или может сюда case как то прикрутить можно. И как будет оптимальней и быстрей?
...
Рейтинг: 0 / 0
08.02.2014, 23:16:11
    #38554709
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Код: sql
1.
Where field like Case when (select ...) = 0 then 'text' else '%text%' end
...
Рейтинг: 0 / 0
08.02.2014, 23:21:53
    #38554712
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Akina,

Поясните пожалуйста
...
Рейтинг: 0 / 0
09.02.2014, 00:19:53
    #38554744
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Akina,

Разобрался. Спасибо большое!
...
Рейтинг: 0 / 0
09.02.2014, 00:34:29
    #38554749
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Еще варианты:
Код: sql
1.
2.
3.
SELECT * FROM mytable WHERE name='temp'
UNION ALL
SELECT * FROM mytable WHERE name LIKE '%temp%' AND NOT EXISTS (SELECT NULL FROM mytable WHERE name='temp')

Код: sql
1.
2.
3.
4.
5.
SELECT * FROM mytable WHERE name='temp'
UNION ALL
SELECT mytable.*
  FROM mytable, (SELECT NULL FROM dual WHERE NOT EXISTS (SELECT NULL FROM  mytable WHERE name='temp')) t
  WHERE name LIKE '%temp%'

Какой будет быстрее - сходу не скажу, надо пробовать. Разумеется, нужен индекс, начинающийся с поля name.
...
Рейтинг: 0 / 0
09.02.2014, 11:02:21
    #38554852
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
miksoft, подумалось:

а никак нельзя в ваш юнион воткнуть SQL_CALC_FOUND_ROWS , а во второй части воспользоваться вызовом соответствующей функции? (честно - лень лезть в консоль) :)
...
Рейтинг: 0 / 0
09.02.2014, 11:15:47
    #38554856
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Arhat109,

насколько я понял из доки - нельзя. FOUND_ROWS() выдаст результат по предыдущему запросу, а не по предыдущей части UNION.

Имхо, это лучше решать на клиенте. Если первая часть что-то вернула, то вторую часть просто не выполнять.
...
Рейтинг: 0 / 0
09.02.2014, 11:17:59
    #38554857
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
miksoft,

пасибки. Это понятно, про клиента... но раз автор вопрошает - почему бы и не поизголяться? :)
...
Рейтинг: 0 / 0
10.02.2014, 07:38:58
    #38555224
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Логики выбора я лично не просек. Вы же не думаете что получите 66 тойот если у вас их всего 6, а в name "toyo".

Ну на всякий случай воткните distinct

select distinct * from table where name='temp' or name like '%temp%';
...
Рейтинг: 0 / 0
10.02.2014, 17:29:07
    #38556078
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
Там номера, например есть 513, а есть 25513, 1513 и т.д. Так вот если есть точное совпадение то остальные не нужны. А если нет, то типа возможно вы искали.
Вариант Akina отлично справился с задачей. С быстродействием не знаю какой лучше конечно но на 2к записей этого и не заметишь.
...
Рейтинг: 0 / 0
10.02.2014, 18:18:59
    #38556150
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IF ELSE в MySQL
SharuPoNemnoguВариант Akina отлично справился с задачей. С быстродействием не знаю какой лучшеМой вариант на самом деле содержит больше сарказма, чем смысла. Хоть и работает... просто сама постановка задачи малоосмысленная. Нет, я понимаю - если не нашли что надо, дадим хоть что-то... но на большой выборке сервер может не понять, что подзапрос независим.
Более "правильным" я бы назвал вариант типа (syntax error! только идея)

Код: sql
1.
2.
3.
4.
select *, (name='temp') equal
from table 
where name like '%temp%'
having equal = max(equal)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / IF ELSE в MySQL / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]