Я делаю это так:
$type_result = mysql_query("SELECT COUNT(id) AS id FROM all WHERE type='Модель 16'", $db);
$count = mysql_fetch_assoc($type_result);
echo "<A href=".ABSOLUTE_WAY."/type/16>Модель 16</A> <I>[".$count[id]."]</I><BR>";
$type_result = mysql_query("SELECT COUNT(id) AS id FROM all WHERE type='Модель 18'", $db);
$count = mysql_fetch_assoc($type_result);
echo "<A href=".ABSOLUTE_WAY."/type/18>Модель 18</A> <I>[".$count[id]."]</I><BR>";
$type_result = mysql_query("SELECT COUNT(id) AS id FROM all WHERE type='Модель 22'", $db);
$count = mysql_fetch_assoc($type_result);
echo "<A href=".ABSOLUTE_WAY."/type/22>Модель 22</A> <I>[".$count[id]."]</I><BR>";
// ... итд 50 ссылок и соответсвенно 50 запросов
Что то мне подскаывает, что дедлать 50 запросов ради вывода колонки ссылок, неправильно.
Есть ли способ проще?
Спустя 14 минут, 23 секунды (31.01.2010 - 16:32) Ice написал(а):
"SELECT COUNT(id) AS id FROM all WHERE type IN(".implode(',', $model_array).")"
Спустя 1 минута, 57 секунд (31.01.2010 - 16:34) sergeiss написал(а):
Вот на 100% рабочий запрос из Постгре, на который, при необходимости, можно наложить и какие-то ограничения через WHERE
Ice - а ты уверен, что твой запрос даст то, что нужно?
select userid, count(userid) from statistics
group by userid
Ice - а ты уверен, что твой запрос даст то, что нужно?
Спустя 3 минуты, 22 секунды (31.01.2010 - 16:38) Ice написал(а):
Я его не тестировал
Спустя 4 минуты, 16 секунд (31.01.2010 - 16:42) sergeiss написал(а):
Цитата (Ice @ 31.01.2010 - 17:38) |
Я его не тестировал |
Так ты сначала протестируй, а потом советуй! По твоему запросу будут выбраны все строки, удовлетворяющие условию, и будет подсчитано их общее количество.
Спустя 3 часа, 25 минут, 53 секунды (31.01.2010 - 20:08) Nikitian написал(а):
SELECT COUNT(*) AS id,`type` FROM all WHERE `type` in ('Модель 16','Модель 17','Модель 18') group by `type`
Спустя 6 часов, 28 минут, 59 секунд (1.02.2010 - 02:37) FatCat написал(а):
Цитата (linf @ 31.01.2010 - 17:18) |
Есть ли способ проще? |
Неверно спроектирована база, оттого и запросы нерациональные.
Похожая задача: в списке тем форума к кажой теме вывести число сообщений в теме.
Нерационально каждый раз запрашивать таблицу сообщений и считать количество сообщений в теме; рационально в таблице тем добавить поле числа сообщений и пересчитывать его при отправке сообщения в форум.
Nikitian
Боюсь что выигрыша в нагрузке не будет.
Попробовал на форумной базе. Запрос подсчета для 30 топиков занял 0.0019 сек. Для одного - менее 0.0001
Спустя 25 минут, 28 секунд (1.02.2010 - 03:02) Nikitian написал(а):
Не знаю в чём не будет выигрыша. Вопросы был как уменьшить количество запросов, чтобы получить результат. Я показал как свести всё в один запрос, вместо того, чтобы делать 50 раз "select count()"
Спустя 1 день, 17 часов, 40 минут, 29 секунд (2.02.2010 - 20:43) linf написал(а):
В конечном итоге не без помощи экспертов, пришел к такому решению:
теперь нужно как то добавить условие:
но чето куда не вставлю, нарушается работа выводится хрень...
Если вставляю так:
пишет:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in...
$type_result = mysql_query("SELECT COUNT(*) as `count`, `type` FROM `all` GROUP BY `type`", $db);
while ($link = mysql_fetch_assoc($type_result)) {
echo "<A href=".ABSOLUTE_WAY."/type/".$link['type'].">".str_replace("_", " ", $link['type'])."</A> <I>[".$link['count']."]</I><BR class=br1>";
}
теперь нужно как то добавить условие:
WHERE out=`$out`AND in=`$in`
но чето куда не вставлю, нарушается работа выводится хрень...
Если вставляю так:
mysql_query("SELECT COUNT(*) as `count`, `type` FROM `all_magazin` WHERE out=`$out`AND in=`$in` GROUP BY `type`", $db);
пишет:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in...
Спустя 28 минут, 34 секунды (2.02.2010 - 21:11) Ice написал(а):
ваа я уже запустался сорри, сорри)
Спустя 12 минут, 19 секунд (2.02.2010 - 21:24) linf написал(а):
Цитата (Ice @ 2.02.2010 - 22:11) |
ваа я уже запустался сорри, сорри) |
без WHERE все работает, оно выбирает из поля type уникальные значения, формирует на их основе ссылки, и пишет рядом с ними количество каждого такого значения...
но без WHERE она ищет по всей таблице, а мне нужно что бы толкьо там, где:
out=`$out`AND in=`$in`
Спустя 2 часа, 24 минуты, 30 секунд (2.02.2010 - 23:48) Nikitian написал(а):
Если in - это имя поля, то надо его апострофами обособить, т.к. это зарезервированное слово. Если же это оператор IN, то используете вы его абсолютно бездумно и потому неправильно.
_____________
Live in new format =)