Выборка с сортировкой

Oparin

Новичок
Выборка с сортировкой

Помогите пожалуйста корректно составить выборку из таблицы
Есть таблица с названиями товаров:
-----------------------
товар вторая часть
товар
товар третья часть
отличный товар
изгибающийся товар
-----------------------
требуется построить выборку таким образом, что бы выдача по запросу "товар" соответсвовала:
-----------------------
товар
товар вторая часть
товар третья часть
отличный товар
изгибающийся товар
-----------------------

т.е. сперва стоит точное соответсвие
далее где искомое слово стоит первым, а потом все остальное
или хотябы что бы первым стояло точное соответствие, а дальше уже все остальное.
Никак не могу этого добиться, просьба помочь!!!
 

Oparin

Новичок
Данная конструкция, действительно на первые позиции ставит точное соответствие, но дальше выдаются вообще все записи, т.е. дальнейшей сортировки не происходит.
Можно ли как то отсортировать и остальные записи под нужды указанные в первом посте?

-~{}~ 25.06.09 17:33:

Добился нужного результата, путем составления с множественной сортировкой из Вашего примера (за что Вам большое спасибо), получилось вот что:

SELECT *
FROM TABLE
WHERE Title like '%товар%'
ORDER BY Title like 'товар' desc, Title like 'товар%' desc, Title like '%товар%' desc

пример работает, но уж очень наворочен. Т.е. происходит тройная сортирвка. Может быть есть возможность упростить?
 

Активист

Активист
Команда форума
Товарищи... Это жесть!

Oparin
Заведи еще одно поле - orderPosition, INT, оно будет содержать порядок сортировки, обновляй это поле при необходимости.
 

Oparin

Новичок
Автор оригинала: Активист
Товарищи... Это жесть!

Oparin
Заведи еще одно поле - orderPosition, INT, оно будет содержать порядок сортировки, обновляй это поле при необходимости.
а по какому критерию я буду обновлять это поле? ручками при добавлении каждого нового товара????
 

Активист

Активист
Команда форума
*****

Прежде всего, для селекта делать такие сортировки мягко говоря нецелесообразно, это ж как колбасить будет MySQL?

Oparin
Сделай при добавлении товара. Можно так

orderPosition у тебя будет принимать 3 значения
1 - Точное соотвествие
2 - в начале
3 - все остальное

Терзают меня сомнения - неверное построение архитектуры БД? Ты расскажи, по какому принципу ты ее делал?
 

Фанат

oncle terrible
Команда форума
да при чем здесь принцип? это просто поиск. вся бд состоит из одного текстового поля.
юзер на странице ищет товар.

Oparin
сколько будет точных совпадений? одно?
 

Oparin

Новичок
Автор оригинала: Активист
*****

Прежде всего, для селекта делать такие сортировки мягко говоря нецелесообразно, это ж как колбасить будет MySQL?

Oparin
Сделай при добавлении товара. Можно так

orderPosition у тебя будет принимать 3 значения
1 - Точное соотвествие
2 - в начале
3 - все остальное

Терзают меня сомнения - неверное построение архитектуры БД? Ты расскажи, по какому принципу ты ее делал?
откуда же мне знать точным совпадением будет:
"товар красный"
"товар синий"
"товар синий с бантиком"
"товар большой розовый"
или просто "товар"
это уже зависит от конкретного пользователя, поэтому приходится, на лету, делать сортировку.

-~{}~ 25.06.09 19:06:

Автор оригинала: *****
Oparin
сколько будет точных совпадений? одно?
Точных соответсвий будет ровно столько сколько в базе имеется ТОЧНЫХ совпадений названий товаров с искомым, т.е. от 0 до бесконечности.
 

Фанат

oncle terrible
Команда форума
откуда там бесконечность-то?

вообще, такие вещи делаются не так.
ищется на точное совпадение, и если находится, то человека кидает сразу на карточку товара. без вывода результатов

если не находится, то изется неточное, и уже выводится результатами.
здесь можно сделать нужную "сртировку" лайк поиск% юнион %поиск%
 

Oparin

Новичок
Автор оригинала: *****
откуда там бесконечность-то?

вообще, такие вещи делаются не так.
ищется на точное совпадение, и если находится, то человека кидает сразу на карточку товара. без вывода результатов

если не находится, то изется неточное, и уже выводится результатами.
здесь можно сделать нужную "сртировку" лайк поиск% юнион %поиск%
товаров с одинаковым названием может быть 10 шт.
если одно точное совпадение, то я именно так и делаю, сразу перебрасываю на карточку товара. ;)

сортировку так и сделал
like товар
like товар%
like %товар%
(показано выше)
а через юнион как-то можно сделать лучше? :confused:
 
Сверху