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

Тема в разделе "PHP", создана пользователем OnArs, 22 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. OnArs

    OnArs

    Регистр.:
    30 авг 2008
    Сообщения:
    259
    Симпатии:
    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 переменных Я получаю кол-во страниц с заданными параметрами. По-моему так не должно быть, как оптимизировать эту группу запросов?


    Большое спасибо! ;)
     
  2. Drak0n4ik

    Drak0n4ik Создатель

    Регистр.:
    8 май 2009
    Сообщения:
    25
    Симпатии:
    1
    PHP:
    $result mysql_query("SELECT count(*) FROM base WHERE pr=7 or 6 or 5 or 4 or 3 or 2",$db);
     
  3. OnArs

    OnArs

    Регистр.:
    30 авг 2008
    Сообщения:
    259
    Симпатии:
    74
    Да нет, таким образом Я получу лишь общее количество с pr 7,6,5,4,3 и 2, а мне нужно получить количество каждого по отдельности... ;(
     
  4. Drak0n4ik

    Drak0n4ik Создатель

    Регистр.:
    8 май 2009
    Сообщения:
    25
    Симпатии:
    1
    А что должно оно считать? У меня формат твоего запроса всегда выдает результат «1», к какой бы таблице и я бы не обращался.
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    А что ж ты лезешь подсказывать, если не понимаешь, что оно должно считать? :eek:
    Кол-во записей, соответствующих каждому условию.

    Оно конечно можно попробовать объединить всё в один запрос через self join, но, имхо, не стоит оно того.
     
  6. Drak0n4ik

    Drak0n4ik Создатель

    Регистр.:
    8 май 2009
    Сообщения:
    25
    Симпатии:
    1
    б.л.я. точно. Пробовал запросы в своей БД делать - возвращало всегда «1». А про количество совпадений я не думал. Пойду-ка лучше я чего-нить умного почитаю :ah:
     
  7. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    попробуй использовать групировку, вот так:
    PHP:
    SELECT count(*) FROM base WHERE `pr` >=and `pr`<=6 GROUP BY `pr`;
     
  8. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    1. Для такого условия группировка вообще не нужна.
    2. Внимательно изучаем задачу - требуется кол-во записей, удовлетворяющих каждому условию.
     
  9. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    можно подзапросами это сделать, результаты будет удобнее доставать, но вот оптимизации в этом случае не будет(а если и будет, то совсем незаметная:(
    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);
     
  10. wwwitalya

    wwwitalya Создатель

    Регистр.:
    4 май 2009
    Сообщения:
    45
    Симпатии:
    18
    Группировка тут как раз очень кстати будет.
    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);
     
    BlackPawn и OnArs нравится это.
Статус темы:
Закрыта.