@stikname

Как сделать мульти выборку с сортировкой из MySQL?

Задача с выборкой из мускла, есть в бд таблица, в которой один из столбцов имеет значения вроде таких как на скрине 3acfd546.png, мне нужно сделать выборку по нескольким номерам.

Варианты вроде:
SELECT * FROM `table` WHERE cat LIKE '%10%' or cat LIKE '%25%' or cat LIKE '%27%';
SELECT * FROM `table` WHERE FIND_IN_SET('10', cat) or FIND_IN_SET('25', cat) or FIND_IN_SET('27', cat);


работают не совсем правильно потому как при выборке результаты не сортируются по количеству совпадений от большего к меньшему.
Первый вариант так вообще фигня, особенно если ему задать %1%, то искать он мне будет и 1 и 16 и 21 айди, что не нужно.

Есть варианты какой нужно делать запрос для вывода результатов с сортировкой по количеству совпадений от большего к меньшему? То есть при выводе результатов сначала идут строки где совпадают три числа, потом два, следом соответственно одно число. Наиболее релевантные. У меня в примере используется три числа в запросе, но их может быть от 1 до 10 к примеру.
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vestail
@Vestail
Software Engineer
На лицо явная ошибка проектирования. В данной таблице не соблюдается первая нормальная форма, которая требует чтобы каждый кортеж таблицы содержал только одно значение на каждый атрибут. То есть в 1 ячейке должно быть только одно значение.
Возможно, то что вы просите можно решить каким-то изощренным способом, но скорее всего дальше будут появляться новые проблемы связные с этой ошибкой. Лучшим выходом будет нормализовать таблицы в вашей базе данных до 3-ей или хотя бы 2-ой нормальной формы. Такие проблемы, после этого, не должны возникать вообще.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы