AlexeyGfi
@AlexeyGfi
YouTube >>> Битриксоид из Колхоза

Как составить mysql-запрос с указанием приоритетной группы по списку ID?

Добрый день!
Прошу помочь в вопросе составления MYSQL-запроса.

Выполняю задание: реализовать поиск одновременно...
- по артикулу (свойство элемента — связанная с элементом таблица),
- по названию (поле таблицы),
- по брендам (свойство элемента),
- по принадлежности к коллекциям (свойство элемента),
- по названию разделов (элемент другой таблицы, к которой элемент привязан по полю SECTION_ID).

Одновременно — чтобы сформировался массив результатов, разбитый на постраничную навигацию.

Приоритет подачи результатов поиска — согласно указанного выше списка. То есть сначала показываем попадание по артикулу, потом по названию, ... и так по списку

В составлении результата участвует много связанных таблиц, хочу делать выборку этих связей только для тех элементов, которые попали на ту или иную страницу в пагинации. Чтобы оптимизировать запросы, свожу всё к одному комплексному запросу.

Как я делаю сейчас:
- перебираю условия (поиск по артикулу, по названию, по бренду...),
- накапливаю массив ID тех элементов, которые соответствуют каждому из параметров,
- в финальном запросе передаю накопленный массив значений ID в качестве ограничения, отбираю записи со всеми нужными свойствами в диапазоне согласно постраничной навигации.

Выборка и постраничка работает, за исключением того, что не соблюдена приоритетность. Товары в выборке — «вперемешку».

Подскажите, как правильно составить запрос?
Хотя бы на уровне mysql (потому что именно на этом уровне сейчас нет понимания).
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
longclaps
@longclaps
SELECT * FROM T WHERE T.`артикул` = a
UNION DISTINCT
SELECT * FROM T WHERE T.`название` = n
UNION DISTINCT
SELECT * FROM T WHERE T.`бренд` = b;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы