Basilisk, да, таблица связей конечно упростила бы решение задачи, но в данной ситуации нужно решить задачу с уже имеющимися условиями.
edogs: По уму - Вам бы базу перестроить.
Но если нужно тупое и не очень быстрое решение (подходит если база небольшая вполне), то как-то так
SELECT id,
ekey,
if(locate(',2,',concat(',',ekey,',')),1,0)+
if(locate(',3,',concat(',',ekey,',')),1,0)+
if(locate(',4,',concat(',',ekey,',')),1,0)
as wght
FROM `tbl`
order by wght desc
Общая мысль - ищите совпадение каждого числа в каждой строке, если находите - присваиваете 1, если нет - присваиваете 0. Сортируете по количеству совпадений (сумме оных).
concat нужен что бы по "1" не искало 16 и 21, тогда озапятив строку с обоих сторон Вы можете искать честные ,1, и найдете только единицы.
Автоматом такой запрос составить несложно, имена полей подставьте свои.
Спасибо, наиболее простое и в общем быстрое решение. Вопрос задавался на нескольких форумах, но этот вариант мне кажется наиболее оптимальным. Под разное количество айди просто реализовать составление запроса в рабочем скрипте.
Пытался найти, можно ли ваш запрос в sqlite перевести, но найти нужного решения не смог. Вы не знаете?
LovelAss:
SELECT *, `cat` REGEXP '[[:<:]](10)[[:>:]]' AS `c1`, `cat` REGEXP '[[:<:]](25)[[:>:]]' AS `c2`, `cat` REGEXP '[[:<:]](27)[[:>:]]' AS `c3` FROM `table` ORDER BY `c1` + `c2` + `c3` DESC
Спасибо и Вам, решение по скорости почти такое же как и предыдущее и выборка та же, но визуально и по адаптации понравился больше предыдущий вариант. ;)
Как можно до сих пор использовать убогий денвер? Если уж у вас винда то можно поставить open server или вообще cygwin в котором можно делать всё что угодно.
А ТС то сразу что то замолчал :)
xseox2ru, ты серьёзно не понял о чем я? :)
Итак, мини урок английского:
Слово саппорт, правильно пишется так - support
Что вижу то пою, хотя наверно тут что слышу то пишу:
Консольные команды линукса решают любые вопросы с этим дампом.
До 1000 wmr.
10 символов
Понял. Ну решили на этом проекте оставить пока так, с вашим вариантом. А для последующих сейчас делаю таблицу связей.
Basilisk, да, таблица связей конечно упростила бы решение задачи, но в данной ситуации нужно решить задачу с уже имеющимися условиями.
По уму - Вам бы базу перестроить.
Но если нужно тупое и не очень быстрое решение (подходит если база небольшая вполне), то как-то так
Общая мысль - ищите совпадение каждого числа в каждой строке, если находите - присваиваете 1, если нет - присваиваете 0. Сортируете по количеству совпадений (сумме оных).
concat нужен что бы по "1" не искало 16 и 21, тогда озапятив строку с обоих сторон Вы можете искать честные ,1, и найдете только единицы.
Автоматом такой запрос составить несложно, имена полей подставьте свои.
Спасибо, наиболее простое и в общем быстрое решение. Вопрос задавался на нескольких форумах, но этот вариант мне кажется наиболее оптимальным. Под разное количество айди просто реализовать составление запроса в рабочем скрипте.
Пытался найти, можно ли ваш запрос в sqlite перевести, но найти нужного решения не смог. Вы не знаете?
Спасибо и Вам, решение по скорости почти такое же как и предыдущее и выборка та же, но визуально и по адаптации понравился больше предыдущий вариант. ;)
Успешного успеха :D
Не ты ли мне вопросы сегодня ночью задавал в джаббере?
И сегодня ваш ДЦ падает :)
Как можно до сих пор использовать убогий денвер? Если уж у вас винда то можно поставить open server или вообще cygwin в котором можно делать всё что угодно.