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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: запрос с GROUP и ORDER

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
RomAndry Администратор
Отправлено: 06 Мая, 2010 - 11:56:06
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




Приветствую.
Вот не могу побороть запрос
id | pid | sid | date
1 20 2 2010-05-01
2 20 1 2010-05-02
3 52 2 2010-05-03
4 20 2 2010-05-04
5 20 1 2010-05-01
необходимо получить записи с последней датой и уникальным sid т.е.
2 20 1 2010-05-02
4 20 2 2010-05-04
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT *
  3. FROM a
  4. WHERE pid=20
  5. GROUP BY sid
  6. ORDER BY date DESC
  7.  

такой вот запрос возвращает с ранней датой а не последней.
где я не так что делаю?
спасибо.
 
My status
 Top
EuGen Администратор
Отправлено: 06 Мая, 2010 - 12:28:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Группировка здесь - не правильное решение. Дело в том, что если ее применять вот так (без явной агрегации - такое только в MySQL можно), то какие именно попадут записи в выборку - предсказать невозможно. Поэтому туда могут попасть записи с какой попало датой - после чего СУБД их сортирует, то есть могут попасться вообще записи "из середины". Таким образом после подобной группировки сортировать вообще не имеет смысла.

Да, кстати, не совсем однозначна формулировка "получить записи с последней датой и уникальным sid" - ведь если sid уникален, то он присутствует 1 раз в таблице, то есть он будет первым и единственным для любой даты. (То, что Вы хотите получить, ясно только из приведенного примера).

Как вариант решения:

SELECT MAX(`date`), sid FROM `a` GROUP BY `sid`


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
RomAndry Администратор
Отправлено: 06 Мая, 2010 - 12:34:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




ясно, спасибо. у меня всегда с GROUP пробелы были Не понял
уникальность sid нужна что бы выбрать по одной записи
 
My status
 Top
EuGen Администратор
Отправлено: 06 Мая, 2010 - 12:36:21
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Вариант решения с MAX попробуйте - я думаю, Вы это имели ввиду.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
RomAndry Администратор
Отправлено: 06 Мая, 2010 - 12:49:12
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




SELECT MAX(`date`), sid FROM `a` GROUP BY `sid`
интересно показывает
id | pid | sid | date
1 20 2 2010-05-01
2 20 1 2010-05-02
4 20 2 2010-05-04
5 20 1 2010-05-01
необходимо получить записи с последней датой и уникальным sid т.е.
2 20 1 2010-05-02
4 20 2 2010-05-04
а выдает
5 20 1 2010-05-02
1 20 2 2010-05-04
т.е. дату правильно выводит но не тот id берет
 
My status
 Top
EuGen Администратор
Отправлено: 06 Мая, 2010 - 12:50:26
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ну так остался 1 шаг - добавить в WHERE нужный pid, я думаю


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
RomAndry Администратор
Отправлено: 06 Мая, 2010 - 12:54:27
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




да это есть. просто странный результат
дата с одной строки данных, id с другой
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB