powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / IF ELSE в MySQL
11 сообщений из 11, страница 1 из 1
IF ELSE в MySQL
    #38554651
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни разу не сталкивался, подскажите возможно ли такое реализовать и как)

есть 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
IF ELSE в MySQL
    #38554709
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
Where field like Case when (select ...) = 0 then 'text' else '%text%' end
...
Рейтинг: 0 / 0
IF ELSE в MySQL
    #38554712
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

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

Разобрался. Спасибо большое!
...
Рейтинг: 0 / 0
IF ELSE в MySQL
    #38554749
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще варианты:
Код: 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
IF ELSE в MySQL
    #38554852
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, подумалось:

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

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

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

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

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

select distinct * from table where name='temp' or name like '%temp%';
...
Рейтинг: 0 / 0
IF ELSE в MySQL
    #38556078
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там номера, например есть 513, а есть 25513, 1513 и т.д. Так вот если есть точное совпадение то остальные не нужны. А если нет, то типа возможно вы искали.
Вариант Akina отлично справился с задачей. С быстродействием не знаю какой лучше конечно но на 2к записей этого и не заметишь.
...
Рейтинг: 0 / 0
IF ELSE в MySQL
    #38556150
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / IF ELSE в MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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