Как написать запрос с сортировкой и группировкой?

Тема в разделе "Базы данных", создана пользователем Gtvar, 26 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Gtvar

    Gtvar Создатель

    Регистр.:
    25 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Помогите сделать запрос для MySQL.
    Код:
    "SELECT * FROM TableProds
    WHERE category_id IN(5,1,3) 
    ORDER BY price";
    Нужно чтобы Выдавало список продуктов сгрупированых по category_id IN(5,1,3) именно в таком порядке.
    тоесть, сначала идут продукты категории 5, отсортированные по цене, затем 1 тоже по цене отсортированные и т.д.
    Пробовал так, не то, оно сортирует категорию как 1 3 5
    SELECT * FROM products WHERE category_id IN(5,1,3) AND enabled = 1 ORDER BY category_id ASC, price ASC
    С группировкой таже история.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Код:
    SELECT * 
    FROM TableProds
    WHERE category_id IN(4,1,3) 
    ORDER BY category_id=4 DESC, category_id=1 DESC, category_id=3 DESC, dengi ASC
    
     
  3. Gtvar

    Gtvar Создатель

    Регистр.:
    25 мар 2010
    Сообщения:
    15
    Симпатии:
    0
    Не прокатил это вариант, пришлось создавать таблицу приоритетов, и делать так:
    Код:
    SELECT * FROM
     products,categories 
    WHERE category_id IN(150,273,214) AND products.enabled = 1 
    AND categories.id = products.category_id 
    ORDER BY categories.sort ASC, price
     
  4. zerdek

    zerdek

    Регистр.:
    29 ноя 2007
    Сообщения:
    346
    Симпатии:
    50
    и это правильно.
    хотя в простейшем случае можно было бы выкрутиться IF-ами, например делаем категорию 5 самой приоритетной.
    Код:
    SELECT *, IF(category_id=5,0,category_id)as mysort
    FROM products WHERE category_id IN(5,1,3) AND enabled = 1
    ORDER BY mysort ASC, price ASC
    
     
  5. Chance55

    Chance55 Постоялец

    Регистр.:
    2 мар 2010
    Сообщения:
    100
    Симпатии:
    6
    Группировку через group by обычно делают.
     
Статус темы:
Закрыта.