[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите почему не сортирует данные?
Flurt
Подскажите почему не сортирует данные при таком запросе к базе?

$query=mysql_query("select id, rus_name, date, count(rus_name) as cnt from comments group by rus_name ORDER BY date DESC",$db);

if (mysql_num_rows($query) > 0)
{$res = mysql_fetch_array($query);

do {printf("Имя:%s количество: %s<br />", $res['rus_name'], $res['cnt'] );}

while($res=mysql_fetch_array($query));

На выходе мне нужно что бы похожие данные сгруппировались, посчиталось количество сгруппированных значений и отсортировались по дате! smile.gif
Вот сортировка не работает. т.е не выводит группу по последней дате.
Подскажите как решить эту проблему?
Заранее благодарен!




Спустя 2 минуты (29.06.2010 - 12:59) linker написал(а):
А поле date какой тип имеет?

Спустя 3 минуты, 18 секунд (29.06.2010 - 13:03) KaFe написал(а):
Flurt не работает, потому что SQL запрос написан не правильно

Спустя 3 минуты, 50 секунд (29.06.2010 - 13:07) Flurt написал(а):
Цитата (linker @ 29.06.2010 - 09:59)
А поле date какой тип имеет?

Тип: DATETIME
В таком виде выводится: 2010-06-29 01:37:12

Спустя 1 минута, 11 секунд (29.06.2010 - 13:08) Flurt написал(а):
Цитата (KaFe @ 29.06.2010 - 10:03)
Flurt не работает, потому что SQL запрос написан не правильно

Подскажите пожалуйста а как правильно? Всю голову уже сломал, не получается и все тут. smile.gif

Спустя 2 минуты, 23 секунды (29.06.2010 - 13:10) sergeiss написал(а):
Проблема - в использовании цикла do-while там, где он не нужен!!!

Для "жертв поповщины" есть такая тема: http://phpforum.ru/index.php?showtopic=21916. Иди, читай, думай.

Спустя 1 час, 2 минуты, 53 секунды (29.06.2010 - 14:13) Flurt написал(а):
Изучил:
$sql = "SELECT id, rus_name, date, count(rus_name) as cnt FROM comments GROUP BY rus_name ORDER BY date DESC";
$res = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);


while($myrow=mysql_fetch_assoc($res)){
$t .= "Название".$myrow['rus_name'];
$t .= "Количество".$myrow['cnt']."<br />";
};
echo $t;

вот теперь у меня такой цикл.
Изменений нет так же не правильно сортирует smile.gif

Спустя 3 минуты, 14 секунд (29.06.2010 - 14:16) DedMorozzz написал(а):
Неправильно это как? Что получаешь и что должно быть?

Спустя 16 минут, 18 секунд (29.06.2010 - 14:32) Flurt написал(а):
Вот что выводит:
user posted image

А вот база данных:
user posted image

Я так понимаю если мы сортируем по дате то "2012" должен быть на первой строчке.

Спустя 3 минуты (29.06.2010 - 14:35) DedMorozzz написал(а):
1е - ты меня хочешь убедить, что 2012 там одна? smile.gif Всё верно выдаёт сейчас. Потому что 28е раньше, чем 29е. Иль что тебя не устраивает?

Спустя 2 минуты, 6 секунд (29.06.2010 - 14:38) Flurt написал(а):
Нет 2012 там 3 считает все павильно, только вот сообщение в 2012 написано 29, а позиция показывается внизу, а должна быть наверху!
А у меня же прописано date DESC то сначало идет 29 а потом 28, т.е 29 должно быть на верхней строчке?

Спустя 14 минут, 5 секунд (29.06.2010 - 14:52) DedMorozzz написал(а):
Проверь синтаксис, точно ли поле с датой называется "date". Потому что так, как написано выше - фильтрует точно.
Иль дай дамп БД - гляну

Спустя 7 минут, 31 секунда (29.06.2010 - 14:59) Flurt написал(а):
Синтаксис точно правильный!
вот: дамп

Спустя 1 минута, 24 секунды (29.06.2010 - 15:01) tomash написал(а):
DedMorozzz
Сортирует, но по какой дате? Если несколько фильмов с одним названием и разными датами?

Спустя 1 минута, 13 секунд (29.06.2010 - 15:02) Gabriel написал(а):
Ну давайте я всетаки сбаяню.
Может стоит заключить название полей в кавычки ``

Спустя 3 минуты, 22 секунды (29.06.2010 - 15:05) DedMorozzz написал(а):
Да причём тут названия фильмов. Они тут не к чему. Это просто значения. А сортирует по дате. Если ДЕСК, то по убыванию. И работает наверняка. А если не работает, то не верный синтаксис. 3го не дано.

Спустя 25 секунд (29.06.2010 - 15:06) Gabriel написал(а):
SELECT
comments.rus_name,
comments.author,
comments.date
FROM `comments`
WHERE
comments.rus_name = 2012
ORDER BY
comments.date DESC

Цитата

2012 test 2010-06-29 01:37:12
2012 Киномания 2010-06-28 11:03:25
2012 sazzonoff 2010-06-26 08:50:37

кажись работаить

Спустя 54 секунды (29.06.2010 - 15:06) tomash написал(а):
Flurt
сделай так
ORDER BY max(date)



Спустя 1 минута, 27 секунд (29.06.2010 - 15:08) tomash написал(а):
DedMorozzz
Я говорю про сортировку сгрупированых значений! Она сортирует по минимальному значению поля date в каждой групе.

Спустя 9 минут, 2 секунды (29.06.2010 - 15:17) Gabriel написал(а):
может хватит пургу нести?
http://dev.mysql.com/doc/refman/5.1/en/dat...l#function_date

Спустя 3 минуты, 18 секунд (29.06.2010 - 15:20) tomash написал(а):
Gabriel
Если это мне, то прочитайте тему сначала

Спустя 26 секунд (29.06.2010 - 15:21) Flurt написал(а):
Цитата (Gabriel @ 29.06.2010 - 12:02)
Ну давайте я всетаки сбаяню.
Может стоит заключить название полей в кавычки ``

Эх, не в этом причина! smile.gif

Спустя 1 минута, 9 секунд (29.06.2010 - 15:22) tomash написал(а):
Flurt
select id, rus_name, date, count(rus_name) as cnt from comments group by rus_name ORDER BY MAX(date) DESC

Спустя 3 минуты, 11 секунд (29.06.2010 - 15:25) Flurt написал(а):
Цитата (tomash @ 29.06.2010 - 12:22)
Flurt
select id, rus_name, date, count(rus_name) as cnt from comments group by rus_name ORDER BY MAX(date) DESC

tomash Спасибо огромное!!! Все работает! smile.gif

Спустя 3 дня, 1 час, 32 минуты, 32 секунды (2.07.2010 - 16:58) Flurt написал(а):
Заметил еще один нюанс smile.gif
Теперь выборка идет по максимальной дате все ок, но автор комментария и дата выводятся на экран самые ранние т.е название (rus_name) вверху это все правильно, а вот автор и дата выводятся не от последнего оставлено сообщения а от первого smile.gif

Вот база данных:
user posted image
Вот как выводит:
user posted image
А вот что хотелось бы:
user posted image

Спустя 31 минута, 11 секунд (2.07.2010 - 17:29) tomash написал(а):
select id, rus_name, MAX(date), count(rus_name) as cnt from comments group by rus_name ORDER BY MAX(date) DESC 

попробуйте так)

Спустя 4 минуты, 50 секунд (2.07.2010 - 17:34) Flurt написал(а):
select *, MAX(date), count(rus_name) as cnt from comments group by rus_name ORDER BY MAX(date) DESC

Вот что выводит:

user posted image


tomash Вообще ничего не изменилось. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.