[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: подсчет строк при выводе в цикле
eni
Здравствуйте!
Помогите пожалуйста решить такую задачу.
Выводятся данные из таблицы в цикле do while и в каждой итерации нужно подсчитать и вывести
количество строк, соответствующее значению одной из переменных.


$res = mysql_query("SELECT id, dd, act, type, model, COUNT(`model`) AS count
FROM table11 WHERE act LIKE '%$act%' AND type LIKE '%$type%' GROUP BY `model` ORDER BY id DESC", $db);


Tакой запрос не работает.




Спустя 12 минут, 17 секунд (12.06.2010 - 17:24) Rand написал(а):
Ты этот запрос перед циклом делаешь? Было бы проще, если бы ты рассказал, что делаешь в цикле и зачем тебе необходимо каждый раз подсчитывать количество записей.

Спустя 6 минут, 27 секунд (12.06.2010 - 17:30) Dron19 написал(а):
echo mysql_num_rows($res);

Спустя 2 минуты, 15 секунд (12.06.2010 - 17:33) Dron19 написал(а):
запрос сделайте обычный, просто с использованием like, ну сортировку по id можете оставить, это Ваше личное дело, а mysql_num_rows скажет Вам цифру строк, которые были найдены

Спустя 35 секунд (12.06.2010 - 17:33) Dron19 написал(а):
считаю ответ дал, на сколько я Вас поянл, Вам это и нужно было, ставьте + =)

Спустя 15 минут, 15 секунд (12.06.2010 - 17:49) Rand написал(а):
Dron19
Размечтался... =) Ему перед этим надо ещё как минимум 9 сообщений написать. И не факт, что это именно то, что ему нужно. Он же написал, что количество записей ему нужно узнавать в каждой итерации, а если $res сделан перед циклом, то и mysql_num_rows будет выдавать всегда одно и то же.

Спустя 5 часов, 44 минуты, 38 секунд (12.06.2010 - 23:33) FatCat написал(а):
Пример похожей задачи и ее решение.
Форум, в процессе показа страницы топика нужно посчитать число сообщений на этой странице раздельно для каждого автора.
В таблице сообщений есть поле member_id - айдишник автора сообщения.
Запрос к БД:
SELECT * FROM ibf_posts WHERE topic_id = 777 ORDER BY pid LIMIT 0,15

Посты выводятся в цикле:
while($row = mysql_fetch_array($query_id, MYSQL_ASSOC))
{
// Вывод текстов сообщений, информации об авторах и т.д.
}

Для обсчета создаем пустой массив:
$count_aut_posts = array();

Заполняем внутри цикла:
if( !isset($count_aut_posts[ $row['member_id'] ]) )$count_aut_posts[ $row['member_id'] ] = 1;
else $count_aut_posts[ $row['member_id'] ]++;

Получаем массив, в котором номера ключей - это айдишники писавших на странице пользователей, а значения ключей - число их сообщений на этой странице.

Спустя 11 часов, 40 минут, 37 секунд (13.06.2010 - 11:14) Igrok написал(а):
Мне кажется, запрос написан не свосем корректно.
Раз в запросе используется агрегирование (count), то группировать нужно по всем остальным не агрегируемым полям, те. не только по model, а по id, dd, act, type, model

Спустя 2 часа, 23 минуты, 10 секунд (13.06.2010 - 13:37) Nikitian написал(а):
Цитата (Igrok @ 13.06.2010 - 08:14)
Мне кажется, запрос написан не свосем корректно.
Раз в запросе используется агрегирование (count), то группировать нужно по всем остальным не агрегируемым полям, те. не только по model, а по id, dd, act, type, model

Запрос написан правильно. Неясно что не работает у ТСа. Либо ошибка, либо неправильно считает, либо вообще не считает...

Спустя 21 час, 29 минут, 12 секунд (14.06.2010 - 11:06) tomash написал(а):
Цитата
Выводятся данные из таблицы в цикле do while и в каждой итерации нужно подсчитать и вывести
количество строк, соответствующее значению одной из переменных.

Задача некорректно поставлена. Для каждой итерации количество строк одинаковое будет.

Спустя 35 минут, 5 секунд (14.06.2010 - 11:41) SlavaFr написал(а):
мне кажется, что @FatCat правилно разглядел проблему так как из использования GROUP BY видно, что @ени количество по "model" определить хочет
и предложил самый удубный для этого метод.

Цитата (Igrok)

Мне кажется, запрос написан не свосем корректно.
Раз в запросе используется агрегирование (count), то группировать нужно по всем остальным не агрегируемым полям, те. не только по model, а по id, dd, act, type, model

Абсолютно точно и почти все БД( кроме mysql) будут при таком запросе @ени ругатся.
проблему @ени можно решить так ж и в sql, но для етого нужно делать self join с такими же поисковыми критериями.
 
SELECT t1.id, t1.dd, t1.act, t1.type, t1.model, modelcount
FROM table11 as t1
inner join
(SELECT model , COUNT(`model`) as modelcount FROM table11
WHERE act LIKE '%$act%' AND type LIKE '%$type%' GROUP BY `model`
) as t2
on t2.model=t1.model
WHERE t1.act LIKE '%$act%' AND t1.type LIKE '%$type%' ORDER BY t1.id DESC


вариант который предложил @FatCat будет работать в пхп более оптимально.
Быстрый ответ:

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