imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 07.06.2004, 10:49     # 1
_ARMAGEDDON_
Guest
 
Сообщения: n/a

Сортировка [php]

Как сделать такую сортировку на mysql: данные сортируются по времени, и одновременно есть поле optional в котором стоят значения 0 и 1, 0(main) 1(optional) время у них одинаковое, надо сделать так чтобы main всегда стоял перед optional, как это сделать?

cid | name | optional
0 | 10:00 Dcba | 0
1 | 10:00 Abcd | 1
2 | Abcd | 0

так же есть поля без времени (Abcd) они должны быть в самом начале, в каком порядке не важно, как все это организовать?

Последний раз редактировалось _ARMAGEDDON_; 07.06.2004 в 11:37.
 
Старый 07.06.2004, 13:15     # 2
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
order by optional, name <--примерно так
Sheryld вне форума  
Старый 07.06.2004, 13:33     # 3
_ARMAGEDDON_
Guest
 
Сообщения: n/a

нет, так optional получается в самом конце
а надо чтобы все сортировалось по времени и если время одинаковое, то optional должен идти после main, т.е должно получиться

чтото (main)
09:00 чтото (main)
10:00 чтото (main)
10:00 чтото (optional)
12:00 чтото (main)
14:00 чтото (main)

Последний раз редактировалось _ARMAGEDDON_; 07.06.2004 в 13:41.
 
Старый 07.06.2004, 13:39     # 4
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
order by name,optional
Gike вне форума  
Старый 07.06.2004, 13:43     # 5
_ARMAGEDDON_
Guest
 
Сообщения: n/a

Цитата:
Gike:
order by name,optional
не помогает...
 
Старый 07.06.2004, 13:49     # 6
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
а что выходит когда так пишешь?

строку запроса полностью покажи
Gike вне форума  
Старый 07.06.2004, 13:55     # 7
_ARMAGEDDON_
Guest
 
Сообщения: n/a

select * from w_list where сid='$info[сid]' order by name

когда дописываю order by name, optional ничего не меняется
 
Старый 07.06.2004, 14:04     # 8
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
странно у меня работает
например:
Код:
 mysql> select id,date,money from bicbets order by date,money;
  +------+----------+-------+
  | id   | date	 | money |
  +------+----------+-------+
  | 8239 | 20040530 |	 2 |
  | 8240 | 20040530 |	 2 |
  | 8241 | 20040530 |	 3 |
  | 8243 | 20040530 |	 5 |
  | 8242 | 20040530 |	 6 |
  | 8244 | 20040530 |	 9 |
  | 8245 | 20040601 |	54 |
  | 8246 | 20040604 |	 5 |
  +------+----------+-------+
Gike вне форума  
Старый 07.06.2004, 14:14     # 9
Sava
Newbie
 
Регистрация: 11.04.2003
Адрес: Мытищи
Сообщения: 26

Sava Мелкий засранец
select * from w_list where сid='$info[сid]' order by name,optional asc

Вот так это будет. Только поля без цифр будут в конце. А если сделать так order by name desc,optional asc, то они будут в начале, но остальные данные отсортируются по убыванию. Так что если обязательно надо сортировать по возрастанию даты, то лучше сделать два запроса, сначала достать без даты, а потом остальное.
Sava вне форума  
Старый 07.06.2004, 14:16     # 10
_ARMAGEDDON_
Guest
 
Сообщения: n/a

у меня не работает OS Win2003, MySQL 3.23.52, PHP 4.3.5, Apache 2.0.47
 
Старый 07.06.2004, 14:20     # 11
Sava
Newbie
 
Регистрация: 11.04.2003
Адрес: Мытищи
Сообщения: 26

Sava Мелкий засранец
Так данные сортируются не правильно или совсем не работает? Покажи что тебе база выдает в ответ на запрос.
Sava вне форума  
Старый 07.06.2004, 14:22     # 12
_ARMAGEDDON_
Guest
 
Сообщения: n/a

есть поля

12:00 3чтото | 0
10:00 2чтото | 0
чтото | 0
10:00 1чтото | 1

при запросе

select * from w_list order by name

получается

10:00 1чтото | 1
10:00 2чтото | 0
12:00 3чтото | 0
чтото | 0

а нужно

чтото | 0
10:00 2чтото | 0
10:00 1чтото | 1
12:00 3чтото | 0

добавление optional desc (asc) ничего не меняет...
 
Старый 07.06.2004, 14:31     # 13
Sava
Newbie
 
Регистрация: 11.04.2003
Адрес: Мытищи
Сообщения: 26

Sava Мелкий засранец
optional asc сортирует по возрастанию т.е. первым будут данные где optional 0 потом 1. Я уже написал что если хочешь чтобы сначала были данные без даты, то либо делаешь два запроса, либо(если все равно как сортировать дату по возрастанию или по убыванию) добавляешь к order by name desc данные без даты будут вначале, а потом пойдут по убыванию с датой.
Sava вне форума  
Старый 07.06.2004, 14:36     # 14
_ARMAGEDDON_
Guest
 
Сообщения: n/a

с датой я уже понял, надо чтобы обязательно было по возрастанию...
но optional asc ничего не меняет...
 
Старый 07.06.2004, 14:46     # 15
Sava
Newbie
 
Регистрация: 11.04.2003
Адрес: Мытищи
Сообщения: 26

Sava Мелкий засранец
Как это ничего не меняет?
SQL-запрос: SELECT * FROM `test` WHERE 1 ORDER BY name, optional ASC;

cid name optional
0 10:00 fghjkhg 0
1 10:00 fghjkhg 1
0 11:00 0
0 fef 0
Если будет optional desc будет вот так
cid name optional
0 10:00 fghjkhg 1
1 10:00 fghjkhg 0
0 11:00 0
0 fef 0

А чтобы получить данные отсортированные как ты хочешь надо два запроса прогнать.
Первый что-то типа: SELECT * FROM `test` WHERE name not LIKE '%:%' (ну или как хочешь отличать данные с датой и без)
Второй: SELECT * FROM `test` WHERE name LIKE '%:%' order by name,optional asc
и потом полученные данные совмещаеш.
Sava вне форума  
Старый 07.06.2004, 14:57     # 16
_ARMAGEDDON_
Guest
 
Сообщения: n/a

0 10:00 fghjkhg 0
1 10:00 fghjkhg 1

получается если fghjkhg и там и там написано.. а ты попробуй в первой строке написать 'bbbbb' а во второй 'aaaaa' и посмотри что получится
 
Старый 07.06.2004, 15:08     # 17
Sava
Newbie
 
Регистрация: 11.04.2003
Адрес: Мытищи
Сообщения: 26

Sava Мелкий засранец
Все нормально получается:
SELECT * FROM `test` WHERE 1 ORDER BY name, optional ASC;

cid name optional
0 10:00 aaaaa 0
0 10:00 aaaaa 1
0 10:00 bbbbb 0
0 10:00 fghjkhg 0
1 10:00 fghjkhg 1
0 11:00 0


Так надо? Или я чё-то недопонимаю? Просто я asc зря добавил, если его не указать по умолчанию сортировка и так по возрастанию будет. так что на него можно забить.

Последний раз редактировалось Sava; 07.06.2004 в 15:10.
Sava вне форума  
Старый 07.06.2004, 15:12     # 18
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
_ARMAGEDDON_
пагади, у тебя '10:00 aaaaa' - это одно поле и ты хочешь чтоб сотировало не учитывая буквы ( только '10:00 ) ?
Gike вне форума  
Старый 07.06.2004, 15:15     # 19
_ARMAGEDDON_
Guest
 
Сообщения: n/a

попробуй вот так

0 10:00 bbbbb 0
0 10:00 aaaaa 1
0 10:00 ссссс 0
1 10:00 cghjkhg 1
0 10:00 fghjkhg 0
0 11:00 0

если отсортируется, то значит мне сегодня больше нельзя работать

Цитата:
Gike:
пагади, у тебя '10:00 aaaaa' - это одно поле и ты хочешь чтоб сотировало не учитывая буквы ( только '10:00 ) ?
да, это одно поле, я хочу чтобы сортировалось все, но если в поле optional стоит 0 это поле будет показываться первым.. если 1 вторым
 
Старый 07.06.2004, 15:17     # 20
Gike
сошел
 
Регистрация: 03.06.2002
Сообщения: 662

Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)Gike Реально крут(а)
0 10:00 bbbbb 0
0 10:00 aaaaa 1
0 10:00 ссссс 0
1 10:00 cghjkhg 1
0 10:00 fghjkhg 0
0 11:00 0

должно получиться

0 10:00 aaaaa 1
0 10:00 bbbbb 0
0 10:00 ссссс 0
1 10:00 cghjkhg 1
0 10:00 fghjkhg 0
0 11:00 0
Gike вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:55.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.