Сортировка строк определенным образом

HatoL

Профессор
Регистрация
5 Фев 2008
Сообщения
206
Реакции
36
Уже который час бьюсь над проблемой. Вообще нужно следующее. Есть текст. Этот текст передается в запрос к базе данных, она отображает таблицы отсортированные следующим образом: сначала показываются записи, начинающиеся на это слово, отсортированные по алфавиту. А потом показываются все остальные записи, тоже отсортированные по алфавиту. Особой производительности от запроса не требуется.

Если сказать на языке запросов, то первый запрос выглядит так:

Код:
SELECT * FROM table WHERE name LIKE 'word%'

Второй можно записать так:

Код:
SELECT * FROM table WHERE name LIKE '%word%' AND name NOT LIKE 'word%'

Оба запишутся так:

Код:
SELECT * FROM table WHERE name LIKE '%word%'

Но как отсортировать в нужном порядке мне результаты — ума не приложу!
 
Уже который час бьюсь над проблемой. Вообще нужно следующее. Есть текст. Этот текст передается в запрос к базе данных, она отображает таблицы отсортированные следующим образом: сначала показываются записи, начинающиеся на это слово, отсортированные по алфавиту. А потом показываются все остальные записи, тоже отсортированные по алфавиту. Особой производительности от запроса не требуется.

Если сказать на языке запросов, то первый запрос выглядит так:

Код:
SELECT * FROM table WHERE name LIKE 'word%'

Второй можно записать так:

Код:
SELECT * FROM table WHERE name LIKE '%word%' AND name NOT LIKE 'word%'

Оба запишутся так:

Код:
SELECT * FROM table WHERE name LIKE '%word%'

Но как отсортировать в нужном порядке мне результаты — ума не приложу!

В DB2 можно так

with rec (FIELD...) as (
SELECT * FROM table WHERE name LIKE 'word%'
union all
SELECT * FROM table WHERE name LIKE '%word%' AND name NOT LIKE 'word%'
) select * from rec order by name

По моему визов в мусуле нет.
 
В DB2 можно так

with rec (FIELD...) as (
SELECT * FROM table WHERE name LIKE 'word%'
union all
SELECT * FROM table WHERE name LIKE '%word%' AND name NOT LIKE 'word%'
) select * from rec order by name

По моему визов в мусуле нет.
Есть, только в результате вашего запроса (с визом не знаю как работать, посмотрел на юнион) не та сортировка получается... Надо отдельно первый результат запроса заордерить и отдельно второй... Блин, почему такая простая задача так геморно решаема на MySQL? Я не понимаю, почему нельзя в двух запросах, разделенных юнионом, задать разные ордеры? По идее ведь выбираются таблицы, потом объединяются... Почему нельзя?
 
Сделайте инсерт селект в временную таблицу с нужным ордером два раза.
 
Сделайте инсерт селект в временную таблицу с нужным ордером два раза.
Ох, спасибо тебе большое, добрый человек :)

Решение-то найдено, теперь париться не надо, но все же хотелось бы знать... Можно ли как-то не по-индусски это сделать?
 
Назад
Сверху