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

Тема в разделе "Базы данных", создана пользователем HatoL, 25 май 2012.

Модераторы: latteo
  1. HatoL

    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%'
    Но как отсортировать в нужном порядке мне результаты — ума не приложу!
     
  2. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    В 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

    По моему визов в мусуле нет.
     
  3. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Есть, только в результате вашего запроса (с визом не знаю как работать, посмотрел на юнион) не та сортировка получается... Надо отдельно первый результат запроса заордерить и отдельно второй... Блин, почему такая простая задача так геморно решаема на MySQL? Я не понимаю, почему нельзя в двух запросах, разделенных юнионом, задать разные ордеры? По идее ведь выбираются таблицы, потом объединяются... Почему нельзя?
     
  4. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    Сделайте инсерт селект в временную таблицу с нужным ордером два раза.
     
    HatoL нравится это.
  5. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Ох, спасибо тебе большое, добрый человек :)

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