Порядок выбора MySQL, где несколько столбцов являются условиями - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу сделать:

SELECT * FROM table WHERE id1 = '123' OR id2= '456' OR id3 = '789' LIMIT 1;

Может быть несколько совпадений, и если это так, я хочу, чтобы совпадение с id1 было возвращено первым, совпадение с id2 было возвращено вторым,и совпадение из id3 будет возвращено третьим.

Я знаю, что могу выполнить это с помощью 3 запросов, например:

SELECT * FROM table WHERE id1 = '123' LIMIT 1

, если совпадений нет, то:

SELECT * FROM table WHERE id2 = '456' LIMIT 1

если совпадений нет, то:

SELECT * FROM table WHERE id3 = '789' LIMIT 1

Должен быть лучший путь.Какой самый лучший и самый эффективный запрос для этого?

1 Ответ

0 голосов
/ 03 декабря 2018

В MySQL вы можете делать заказы по логическим выражениям.Я думаю, что они переведены в 0 и 1, поэтому с сортировкой по убыванию вы можете сначала получить значения 'true-ish'.Таким образом, вы можете сортировать по трем выражениям одно за другим:

SELECT * FROM table 
WHERE id1 = '123' OR id2= '456' OR id3 = '789' 
ORDER BY 
  id1 = '123' DESC,
  id2 = '456' DESC, 
  id3 = '789' DESC 
LIMIT 1;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...