Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Группировка и сортировка в запросе
Форумы портала PHP.SU » » Вопросы новичков » Группировка и сортировка в запросе

Страниц (1): [1]
 

1. lamozavrik - 30 Июля, 2012 - 12:46:53 - перейти к сообщению
Всем доброго времени суток. Кто может подсказать как решить мою проблемку. Вообщем суть такова: Есть в базе данных, к примеру, 3 категории:
1. Ягоды
2. Овощи
3. Фрукты
в категориях есть продукты соответственно и их количество в кг:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1. Ягоды
  2.    1. Арбуз - 52
  3.    2. Малина - 23
  4.    3. Вишня - 35
  5.  
  6. 2. Овощи
  7.    1. Картошка - 120
  8.    2. Капуста - 80
  9.    3. Буряк - 45
  10.  
  11. 3. Фрукты
  12.    1. Яблоки - 15
  13.    2. Груши - 12


Вообщем я написал селект, который делает следующую выборку:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Овощи    |    Картошка
  2. Овощи    |    Капуста
  3. Овощи    |    Буряк
  4. Фрукты   |   Яблоки
  5. Фрукты   |   Груши
  6. Ягоды     |   Арбуз
  7. Ягоды     |   Вишня
  8. Ягоды     |   Малина


То есть я в селекте задал ORDER BY название категории, вес DESC. Ка видно отсортировало по названию категорий, а по весу отсортировало в пределах самой категории. Если я сделаю ORDER BY название категории, вес ASC, то сортировка поменяется только в самой категории, а категории дальше будут отсортированы в алфавитном порядке. А как сделать так, что бы когда я указывал вес ASC или вес DESC, то менялся порядок категорий.
Заранее спасибо ))
2. Viper - 30 Июля, 2012 - 12:58:23 - перейти к сообщению
В подзапросе указали сортировку?
И вообще запрос ваш где?
3. EuGen - 30 Июля, 2012 - 13:00:10 - перейти к сообщению
Из вышенаписанного я предполагаю, что требуется сортировка по суммарному значению веса в каждой категории. Если это так, то подойдет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT cat_data.category, cat_data.name, cat_data.weight FROM (SELECT category, SUM(weight) AS total_weight FROM cat_data GROUP BY category ORDER BY total_weight DESC) AS internal_weight LEFT JOIN cat_data ON cat_data.category=internal_weight.category
4. lamozavrik - 30 Июля, 2012 - 13:02:54 - перейти к сообщению
EuGen, спасибо, как раз так и сделал ))) Все получилось )

 

Powered by ExBB FM 1.0 RC1