[MySQL] Оптимизация группы запросов

Статус
В этой теме нельзя размещать новые ответы.

OnArs

Гуру форума
Регистрация
30 Авг 2008
Сообщения
258
Реакции
74
Всем Нульдянам привет! :ay:


Есть вот такой кусок кода:
PHP:
$result = mysql_query("SELECT count(*) FROM base WHERE pr='7'",$db);
$se = mysql_fetch_array($result);
$pr7 = $se[0];
            
$result = mysql_query("SELECT count(*) FROM base WHERE pr='6'",$db);
$se = mysql_fetch_array($result);
$pr6 = $se[0];
            
$result = mysql_query("SELECT count(*) FROM base WHERE pr='5'",$db);
$se = mysql_fetch_array($result);
$pr5 = $se[0];
    
$result = mysql_query("SELECT count(*) FROM base WHERE pr='4'",$db);
$se = mysql_fetch_array($result);
$pr4 = $se[0];
            
$result = mysql_query("SELECT count(*) FROM base WHERE pr='3'",$db);
$se = mysql_fetch_array($result);
$pr3 = $se[0];
            
$result = mysql_query("SELECT count(*) FROM base WHERE pr='2'",$db);
$se = mysql_fetch_array($result);
$pr2 = $se[0];


Т.е. в 6 переменных Я получаю кол-во страниц с заданными параметрами. По-моему так не должно быть, как оптимизировать эту группу запросов?


Большое спасибо! ;)
 
PHP:
$result = mysql_query("SELECT count(*) FROM base WHERE pr=7 or 6 or 5 or 4 or 3 or 2",$db);
 
Да нет, таким образом Я получу лишь общее количество с pr 7,6,5,4,3 и 2, а мне нужно получить количество каждого по отдельности... ;(
 
А что должно оно считать? У меня формат твоего запроса всегда выдает результат «1», к какой бы таблице и я бы не обращался.
 
А что должно оно считать?
А что ж ты лезешь подсказывать, если не понимаешь, что оно должно считать? :eek:
Кол-во записей, соответствующих каждому условию.

Оно конечно можно попробовать объединить всё в один запрос через self join, но, имхо, не стоит оно того.
 
Кол-во записей, соответствующих каждому условию.
б.л.я. точно. Пробовал запросы в своей БД делать - возвращало всегда «1». А про количество совпадений я не думал. Пойду-ка лучше я чего-нить умного почитаю :ah:
 
попробуй использовать групировку, вот так:
PHP:
SELECT count(*) FROM base WHERE `pr` >=2 and `pr`<=6 GROUP BY `pr`;
 
1. Для такого условия группировка вообще не нужна.
2. Внимательно изучаем задачу - требуется кол-во записей, удовлетворяющих каждому условию.
 
можно подзапросами это сделать, результаты будет удобнее доставать, но вот оптимизации в этом случае не будет(а если и будет, то совсем незаметная:(
PHP:
$sql="select (SELECT count(*) FROM base WHERE pr='7') as s7, (SELECT count(*) FROM base WHERE pr='6') as s6, (SELECT count(*) FROM base WHERE pr='5') as s5, (SELECT count(*) FROM base WHERE pr='4') as s4, (SELECT count(*) FROM base WHERE pr='3') as s3, (SELECT count(*) FROM base WHERE pr='2') as s2";
$result = mysql_query($sql,$db); 
$se = mysql_fetch_array($result); 
print_r($se);
 
Группировка тут как раз очень кстати будет.
PHP:
$result=mysql_query('SELECT count(*) AS `count`, `pr` FROM base WHERE `pr` >=2 and `pr`<=6 GROUP BY `pr`');
$pr=array();
while ($row=mysql_fetch_assoc($result)) $pr[$row['pr']]=$row['count'];
print_r($pr);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху