ФорумРазработкаБазы данных → Сортировка с групировкой

Сортировка с групировкой

  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2008 г. 7:56

    Подскажите плиз как сделать сортировку по сравнению поля, к примеру надо искать похожих людей
    первое - по фамилии
    второе - по имени
    третье по отчеству,
    чтото вроде этого
    SELECT * 
    FROM users
    WHERE f_name = "ИМЯ"
    OR l_name = "ФАМИЛИЯ"
    OR g_name = "ОТЧЕСТВО"

    но, сам ORDER должен выплюнуть сначала первое условие, потом второе, потом третье, тоесть на первых местах по любому должны ити люди с одинаковой фамилией. Естессна ORDER BY f_name DESC, l_name DESC… не подходит. Кто то сталкивался с таким? Думаеться в сторону GROUP BY f_name , l_name… но работает ли этот механизм?
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 16 декабря 2008 г. 8:48, спустя 51 минуту 39 секунд

    А нельзя сделать три разных запроса?
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 16 декабря 2008 г. 10:03, спустя 1 час 14 минут 58 секунд


    А нельзя сделать три разных запроса?

    Ха ха ха!!

    По теме, ща тему на этом форуме найду с моим похожим вопросом
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 16 декабря 2008 г. 10:06, спустя 2 минуты 46 секунд

    http://pyha.ru/forum/topic/1322.0

    Что-то типа

    SELECT
    IF(f_name = "ИМЯ", 0, 1) AS sort1,
    IF(l_name = "ФАМИЛИЯ", 0, 1) AS sort2
    ….
    ORDER BY sort1, sort2
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 16 декабря 2008 г. 10:07, спустя 49 секунд

    SELECT * 
    FROM users
    WHERE f_name = "ИМЯ"
    OR l_name = "ФАМИЛИЯ"
    OR g_name = "ОТЧЕСТВО"

    group by concat(f_name,l_name,g_name)

    попробуй так :)
    Сапожник без сапог
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2008 г. 12:35, спустя 2 часа 28 минут 28 секунд

    Прикольно. Завтра на работе покомбинирую.
    }/{EHR, нельзя - и так на базу нагрузка большая, тут ещё это давит, просто это не просто запросик, ещё n-джойнов плюс проверки по полям типа is_delete, is_problem, is_active, validated_at, end_date, start_date, плюс ко всему также применять это всё и к Иннер-Джойненым полям, плюс всякие мелкие окошки с такойже лабудой, благо Inno, можно индексами подснять нагрузку. Я спрашиваю не из-за того что я не могу сделать 3 запроса, но опятьже: как ты собрался эти 3 запроса потом групировать? в одном запросе ещё 3 вложеных? ну не это не годиццо.

    Спасибо всем за советы
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 16 декабря 2008 г. 12:56, спустя 20 минут 57 секунд

    открой для себя union select :)
    Сапожник без сапог
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2008 г. 13:58, спустя 1 час 1 минуту 35 секунд


    открой для себя union select :)
    Это ты к теме или к определённой фразе?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 16 декабря 2008 г. 13:59, спустя 1 минуту 6 секунд

    как ты собрался эти 3 запроса потом групировать? в одном запросе ещё 3 вложеных? ну не это не годиццо.
    Сапожник без сапог
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 17 декабря 2008 г. 0:18, спустя 10 часов 19 минут 37 секунд

    Я таки до конца не пойму, что собственно требуется ГРУППИРОВАТЬ или CОРТИРОВАТЬ? Суть разные вещи …
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2008 г. 1:29, спустя 1 час 10 минут 51 секунду


    SELECT * 
    FROM users
    WHERE f_name = "ИМЯ"
    OR l_name = "ФАМИЛИЯ"
    OR g_name = "ОТЧЕСТВО"

    group by concat(f_name,l_name,g_name)

    попробуй так :)
    Кта - опять же это только пример. CONCAT не годицца, к примеру 3им будет не отчество а IN(SELECT …)
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2008 г. 3:05, спустя 1 час 35 минут 22 секунды

    Короче получилось чтото вроде этого
    SELECT vacancy.*, helper_country.name as country_name , helper_country_state.name as country_state_name, client.company_name as company_name, client.logo_image_path as logo, client.id as client_id
    , user_watching_list.id as in_watching_list,
    IF(vacancy.subject_id = 113 , 0 , 1) AS sort1,
    IF(vacancy.offer_type_id = 1 , 0 , 1) AS sort2,
    IF(vacancy.id IN (SELECT category_id FROM entity_category where vacancy_id = vacancy.id) , 0 , 1)AS sort3
    FROM vacancy
    LEFT JOIN helper_country ON vacancy.country_id = helper_country.id
    LEFT JOIN helper_country_state ON vacancy.country_state_id = helper_country_state.id
    LEFT JOIN client ON vacancy.client_id = client.id
    LEFT JOIN entity_category ON entity_category.vacancy_id = vacancy.id
    LEFT JOIN user_watching_list ON (user_watching_list.vacancy_id = vacancy.id AND user_watching_list.user_id = 7226)
    WHERE vacancy.published_at IS NOT NULL
    AND vacancy.flag_deleted <>1
    AND vacancy.flag_active =1
    AND vacancy.date_finish >= NOW()
    AND client.flag_deleted <> 1
    AND (vacancy.subject_id = 113 OR vacancy.offer_type_id = 1 OR vacancy.id IN (SELECT category_id FROM entity_category where vacancy_id = vacancy.id))
    AND client.validated_at > '1900-01-01 00:00:00' GROUP BY vacancy.id ORDER BY sort1 ASC , sort2 ASC, sort3 ASC , title ASC
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 17 декабря 2008 г. 3:16, спустя 11 минут 1 секунду

    это ты называешь большой запрос?
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2008 г. 3:17, спустя 1 минуту

    Дооо, щас Мавр тебе покажет большой запрос)) Мне только рассказывал, и то я охуел)
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2008 г. 3:31, спустя 14 минут 29 секунд


    это ты называешь большой запрос?
    Нет не называю, просто как бы мне надо с него не много - всего 4 поля, плюс одно лого и плюс один watching лист, а так гдето раза в 2.5 больше этого наверное максимально большой приходилось писать, просто зачем? есть всякие view, процедуры и прочая лабуда

Пожалуйста, авторизуйтесь, чтобы написать комментарий!