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

Форум MySQL

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

 

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

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

тема: GROUP BY и сортировка
 
 автор: designshadow   (23.02.2011 в 22:15)   письмо автору
 
 

Есть такой запрос:
mysql_query("SELECT id, FROM `mes` WHERE number='$ID' GROUP BY code ORDER BY viewed,id DESC");


В таблице содержаться много строк с одинаковым значением code, и их группирую GROUP BY code.
Как сделать сортировку сначала по viewed(0 либо 1 в таблице), а потом по id DESC(от большого числа к меньшему). Из-за ORDER BY не правильно сортирует.

  Ответить  
 
 автор: cheops   (24.02.2011 в 05:31)   письмо автору
 
   для: designshadow   (23.02.2011 в 22:15)
 

Хм... если не сложно, прикрепите дамп таблицы, чтобы можно было воспроизвести ситуацию и подобрать подходящий запрос (только ведь при группировке в поля id и viewed будут попадать случайные значения из группы, т.е. не всегда имеет смысл сортировать).

  Ответить  
 
 автор: designshadow   (24.02.2011 в 17:29)   письмо автору
 
   для: cheops   (24.02.2011 в 05:31)
 

cheops
Упрощал запрос, сделал ошибку.
mysql_query("SELECT id, FROM `mes` WHERE number in (1,2) GROUP BY code ORDER BY viewed,id DESC");


id -- code - viewed - number
1 -- asd --- 1 -------- 2
2 -- sss --- 1 -------- 1
3 -- asd --- 1 -------- 2
4 -- sss --- 1 -------- 1
5 -- sss --- 1 -------- 1
6 -- asd --- 0 -------- 2

Должен вывести первым number 2 а потом number 1 но получается наоборот...

Вообщем такой запрос с GROUP BY не корректно сортирует.

  Ответить  
 
 автор: cheops   (24.02.2011 в 19:27)   письмо автору
 
   для: designshadow   (24.02.2011 в 17:29)
 

Дело в том, что сначала выполняется группировка, а лишь потом сортировка, т.е. у вас в качестве групповой строки может быть совершенно любая из asd и sss строк. Может получиться, что viewed у обеих строк равен 1 или 1 и 0, причем при добавлении и удалении записей эти строки будут изменяться. Вы какие id хотите получить и вообще какая стоит задача?

  Ответить  
 
 автор: designshadow   (24.02.2011 в 19:48)   письмо автору
 
   для: cheops   (24.02.2011 в 19:27)
 

Опишу полностью задачу:

mysql_query("SELECT own_id, other_id FROM `mes` WHERE own_id='$ID' OR other_id='$ID' GROUP BY code ORDER BY viewed,id DESC LIMIT $start, $num");

table messages:
id -- code - viewed - own_id -- my_id -- text
1 -- asd --- 1 ----------- 2 --------- 1
2 -- sss --- 1 ----------- 1 --------- 2
3 -- asd --- 1 ----------- 2 --------- 1
4 -- sss --- 1 ----------- 1 --------- 2
5 -- sss --- 1 ----------- 1 --------- 2
6 -- asd --- 0 ----------- 2 --------- 1
...
116 -- rfd --- 1 ----------- 32 --------- 12
...
226 -- 45g--- 1 ----------- 17 --------- 99

id - autoincrement, primary(id сообщения)
code - уникальное число, связь между отправителем и получателем сообщения
viewed - если 0 то сообщение не просмотрено, если 1 то просмотрено.

Хочу реализовать вывод сообщений для конкретного пользователя группируя и сортируя по viewed,id DESC.

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

Задача реализована, проблема лишь в сортировке

  Ответить  
Rambler's Top100
вверх

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