Цитата:
Сообщение от editeur
|
Можно и таблицу связей делать для айди, но хотелось тут сделать решение именно для такой таблицы как есть сейчас. Постгресс точно не нужен.
Цитата:
Сообщение от lorien
1) Сколько записей в таблице?
2) Сколько записей обычно попадает в выборку?
3) Сколько фильтров-номеров обычно в выборке используется (запросы LIKE)?
4) Сколько максимально может быть использовано фильтров-номеров в одном запросе?
5) Cколько всего различных значений присутствует в полях cat (кол-во категорий, по сути)?
6) Сколько таких операций поиска проводится в минуту?
Решается добавлением запятых в начало и конец значения в колонке cat и запросами типа LIKE '%,число,%'
|
1. Сейчас 15к, но может быть и 150к
2. В выборку могут попасть и все записи если будет задано много айди для поиска. Но это в общем не тестировалось
3. В выборке в среднем от 1 до 10 айди за раз
4. Не знаю, ну к примеру 15
5. Примерно до 15
6. Зависит от трафика на сайте, это фактически, выборка похожих видео для ролика, а айди эти, это теги.
Цитата:
Сообщение от editeur
|
Спасибо, рабочий вариант, но увы медленно работает. Мне недавно подкинули вариант который в общем выполняет задачу и довольно быстро, по крайней мере на таблице с 15к записей.
Код:
SELECT id,
cat,
if(locate(',10,',concat(',',cat,',')),1,0)+
if(locate(',25,',concat(',',cat,',')),1,0)+
if(locate(',27,',concat(',',cat,',')),1,0)
as wght
FROM `table`
order by wght desc
В данном запросе я ищу всё те же айди 10/25/27 , в результате получаю отсортированный по весу столбец, в котором сначала идут строки в которых встречаются все три айди из запроса, потом два, ну и далее пошли бы те где один айди, ну в этом примере не влезает в экран.
Есть идеи как доработать запрос?
В любом случае, спасибо всем за попытку помочь.