Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сгрупировать даные с использованием order by
 
 автор: kest131   (20.08.2006 в 16:33)   письмо автору
 
 

Допустим есть талица:

Tab 1
id num
1 5
2 6
3 7
4 7
5 6
6 5

Сначала надо сгрупировать по дате (по id)
select * from tab1 order by id desc;

А потом надо как-то сделать что-бы были еще сгрупированы одинаковые значения в столбце num


Тоесть должно получиться такое:

Tab1
id num
6 5
1 5
5 6
2 6
4 7
3 7



Можно ли как-то это сделать?

   
 
 автор: cheops   (20.08.2006 в 18:29)   письмо автору
 
   для: kest131   (20.08.2006 в 16:33)
 

1) Под "сгруппировать" вы имеете ввиду "отсортировать"?
2) Имеется ввиду запрос
select * from tab1 order by num desc;

или
select * from tab1 order by id, num desc;

или
select * from tab1 order by num, id desc;

   
 
 автор: kest131   (20.08.2006 в 18:58)   письмо автору
 
   для: cheops   (20.08.2006 в 18:29)
 

Столбец num вообще не надо сортировать как order by его надо отсортировать по схожести значений.
Должно получиться

Tab1
id num
6 45678
1 45678
5 3565
2 3565
4 6767567
3 6767567

первым идет Id 6 как последний id с num=45678 как последний , вторым id 1 Так как у него такойже num=45678 , следующий id 5 c num=3565 так как нету больше id c num=45678 , потом id 2 так так у него тоже num=3565 и т.д

Но таблица будет болшой и получаеться что одинаковых значений в num может быть очень много, поэтому нужно учитывать последнии 50 Id...Так лучше приведу последовательный пример.

select * from tab1 order by id desc limit 50;
в том что получилось возможно есть столбца с одинаковыми num и их надо отсортировать как тут:

Tab1
id num
6 45678
1 45678
5 3565
2 3565
4 6767567
3 6767567


Надеюсь поймете.

   
 
 автор: cheops   (20.08.2006 в 19:15)   письмо автору
 
   для: kest131   (20.08.2006 в 18:58)
 

С трудом если честно понимаю, а какова исходная цель, для чего это предназначено?

   
 
 автор: kest131   (20.08.2006 в 20:00)   письмо автору
 
   для: cheops   (20.08.2006 в 19:15)
 

Для удобства конечно.

Есть таблица коментариев к фоткам.
Хочу сделать страницу с последними коментариями.

У каждого коментария рядом есть уменьшенная копия фотки.
Номер фотки к которой оставляют комментарий находяться в столбце num.

Допустим выводиться по 50 последних комментов .И допутим среди них есть коментарии которые относяться к одной и тойже фотке.Тогда для удобства их надо сгрупировать, что-бы они шли вместе.Как тут:

Tab1
id num
6 45678 - номер фотки
1 45678 - номер фотки
5 3565 - номер фотки
2 3565 - номер фотки
4 6767567 - номер фотки
3 6767567 - номер фотки

Надеюсь так понятнея.

   
 
 автор: cheops   (21.08.2006 в 02:00)   письмо автору
 
   для: kest131   (20.08.2006 в 20:00)
 

Смущает странный порядок фотографий, а вместо
id num
6 45678 - номер фотки
1 45678 - номер фотки
5 3565 - номер фотки
2 3565 - номер фотки
4 6767567 - номер фотки
3 6767567 - номер фотки

Можно так?
id num
5 3565 - номер фотки
2 3565 - номер фотки
6 45678 - номер фотки
1 45678 - номер фотки
4 6767567 - номер фотки
3 6767567 - номер фотки

   
 
 автор: kest131   (21.08.2006 в 02:35)   письмо автору
 
   для: cheops   (21.08.2006 в 02:00)
 

Нет вы так и непоняли.

Номера фоток вообще не причем.Главное это дата.Я же писал:

>Допустим выводиться по 50 последних комментов .И допутим среди них есть коментарии которые относяться к одной и тойже фотке.Тогда для удобства их надо сгрупировать, что-бы они шли вместе.Как тут:

id num
6 45678 - номер фотки
1 45678 - номер фотки
5 3565 - номер фотки
2 3565 - номер фотки
4 6767567 - номер фотки
3 6767567 - номер фотки


Все я правильно написал.
Ну сами прикиньте выводиться по 50 последних коментов.Это надеюсь понятно.У каждой фотки рядом есть уменьшенная копия .И допустим к одной фотки оставили сразу последних 10 комментариев и не выводить же к каждому коменту уменьшенную копию этой фотки (тогда будет 10 одинаковых фоток на странице, а зачем это надо).Поэтому надо выводить одну фотку а рядом с ней эти 10 коментов, но остаеться вопрос как узнать что есть коменты которые относяться к одной и той-же фотке для этого мне и надо сдерать сортировку по mysql.

Во втором моем сообщении я более подробно поесняю как идет сортировка и что с чем связаны.
Вы же мастер и должны логически расуждать .Пожалуйста поднапрягите мозг и помогите.

   
 
 автор: kasmanaft   (21.08.2006 в 06:40)   письмо автору
 
   для: kest131   (21.08.2006 в 02:35)
 

cheops вообще обнаглел, не помогает ... никто другой моск поднапрячь не хочет? ;)

   
 
 автор: Trianon   (21.08.2006 в 09:11)   письмо автору
 
   для: kasmanaft   (21.08.2006 в 06:40)
 

и не говорите... форменное безобразие.
:))))
select * from (select * from tab1 order by id desc limit 50 )as t2 order by num

   
 
 автор: kest131   (21.08.2006 в 15:39)   письмо автору
 
   для: Trianon   (21.08.2006 в 09:11)
 

Вы тоже не совсем поняли суть дела.
>order by num

Его не нужно так сортировать если его так сортировать то получиться

id num
5 3565 - номер фотки
2 3565 - номер фотки
6 45678 - номер фотки
1 45678 - номер фотки
4 6767567 - номер фотки
3 6767567 - номер фотки

P/S Как и показывал cheops

а нужно так:

id num
6 45678 - номер фотки
1 45678 - номер фотки
5 3565 - номер фотки
2 3565 - номер фотки
4 6767567 - номер фотки
3 6767567 - номер фотки

   
 
 автор: Trianon   (21.08.2006 в 15:58)   письмо автору
 
   для: kest131   (21.08.2006 в 15:39)
 


select t1.id as id , t1.num as num from 
  (select id, num from tab1 order by id desc limit 50 
     )as t1 
  join 
  (select num, max(id) as maxid  from 
    (select * from tab1 order by id desc limit 50 
     )as t2 
    group by num 
  ) as t3
  on t1.num=t3.num order by maxid desc, id desc

   
 
 автор: kest131   (21.08.2006 в 16:17)   письмо автору
 
   для: Trianon   (21.08.2006 в 15:58)
 

WOW. Просто гениально , как я сам не додумался.....

Действительно то что надо.

   
 
 автор: cheops   (21.08.2006 в 11:55)   письмо автору
 
   для: kest131   (21.08.2006 в 02:35)
 

>Во втором моем сообщении я более подробно поесняю как идет сортировка и что с чем связаны.
>Вы же мастер и должны логически расуждать .Пожалуйста поднапрягите мозг и помогите.
:)))
>Ну сами прикиньте выводиться по 50 последних коментов.
Т.е. в таблице имеется поле даты или нет? Ввести его можно?

   
 
 автор: kest131   (21.08.2006 в 15:31)   письмо автору
 
   для: cheops   (21.08.2006 в 11:55)
 

Поля даты ? зачем они нужны можно же по id сортировать.
НУ вообщето там есть поля даты в формате yyyy-mm-mm
Если они помогут.....

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования