SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.01.2012 13:28:39

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Помогите сделать сложную сортировку

Имеется таблица tab1 c полями:
NAME    | TIME
name_1    | 01.09.2011
name_2    | 02.09.2011
name_3    | 03.09.2011
name_4    | 04.09.2011
name_3    | 05.09.2011
name_1    | 06.09.2011
name_7    | 07.09.2011
Нужно на выходе получить данные отсортированные следующим образом:
NAME    | TIME
name_1    | 01.09.2011
name_1    | 06.09.2011
name_2    | 02.09.2011
name_3    | 03.09.2011
name_3    | 05.09.2011
name_4    | 04.09.2011
name_7    | 07.09.2011

Подскажите пожалуйста как правильно с наименьшей нагрузкой выполнить данную сортировку

Неактивен

 

#2 09.01.2012 13:38:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать сложную сортировку

Для скорости добавьте индексы на временные поля (к слову, в каком формате дату храните? надо бы в date, чтобы сравнение/сортировка нормально работали).
А сам запрос - через union'ы, по очереди по всем name'ам.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 09.01.2012 13:43:17

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

Есть несколько имен пользователей совершивших действие в какоето время, нужно представить данные в порядки наистарейшего  действия, а затем ниже записать все действия этого пользователя в хронологическом порядке, затем находим следующего пользователя который совершил действие после предыдущего, и записываем его действия в хронологическом порядке и т.к. далее. Т.е. первым будет name_1 т.к. его дата действия самая ранняя, затем опять name_1 (т.к. нужно перечислить все действия пользователя в хронолог. порядке), следующий name_2 т.к. он после первого действия name_1 наиболее ранний и т.д. Надеюсь объяснил доступно.

Неактивен

 

#4 09.01.2012 13:45:29

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать сложную сортировку

Вы не написали, в каком формате хранится дата.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 09.01.2012 13:49:19

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

Дата хранится вот в таком формате: 2012-01-09 11:13:18

Неактивен

 

#6 09.01.2012 13:51:56

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать сложную сортировку

я про другое. Покажите результат запроса show create table tab1.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 09.01.2012 13:56:34

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

Сейчас не могу показать, БД на другом компьютере, что вы хотите узнать?

Неактивен

 

#8 09.01.2012 13:58:45

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать сложную сортировку

Ну, как сможете, так и и покажите. А если еще и дамп самой таблички приложите, так совсем хорошо будет wink. В форме insert into...


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 09.01.2012 13:59:30

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

Формат данных DATETIME

Неактивен

 

#10 09.01.2012 14:03:15

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

1    INSERT INTO
2        `tab1` (`name`, `col1`, `col2`, `time`)
3    VALUES
4        ('$name[$i]', '$col1[$i]', '$col2[$i]', '$time[$i]')

Неактивен

 

#11 09.01.2012 14:03:27

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите сделать сложную сортировку

Тогда порядок. Если запрос по моим рекомендациям затрудняетесь составить, то приложите show create table tab1 и данные таблицы в формате insert into... (данные не обязательно все, главное, чтобы минимальный тестовый набор был, на котором запрос отладить можно).


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 09.01.2012 14:11:26

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

Так в первом же посте приведен пример или этого не достаточно? Давайте считать что данные введены в тех форматах в которых нужно для корректной работы. Как организовать нужную сортировку?Спасибо.

Неактивен

 

#13 09.01.2012 14:38:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать сложную сортировку

order by NAME, `TIME`  ?

Неактивен

 

#14 09.01.2012 14:45:29

glintvein
Участник
Зарегистрирован: 09.01.2012
Сообщений: 8

Re: Помогите сделать сложную сортировку

vasya написал:

order by NAME, `TIME`  ?

Тогда получится что имена будут в алфавитном порядке, а затем в хронологическом, в итоге первым будет пользователь не тот который совершил действие раньше, а тот у которого имя по алфавиту раньше. А надо чтобы первым был тот кто совершил действие раньше, после был писок всех его действий, затем следующий пользователь в хронологич. порядке

Неактивен

 

#15 09.01.2012 14:59:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать сложную сортировку

select t2.* from
(select NAME, min(`TIME`), @i:=@i+1 i from `table`, (select @i:=0) t1 group by 1 order by 2) t
join `table` t2 using(name) order by i;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson