За последние 24 часа нас посетили 17627 программистов и 1284 робота. Сейчас ищут 1463 программиста ...

Получение рубрик, число членов которых максимальное (MySQL)

Тема в разделе "MySQL", создана пользователем Locker, 4 мар 2007.

  1. Locker

    Locker Активный пользователь

    С нами с:
    12 авг 2006
    Сообщения:
    124
    Симпатии:
    0
    Подскажите, как изящней поступить. Есть каталог допустим из 10 рубрик, и есть товары, которые в этих рубриках находятся. 2 разные таблицы. Хочу вывести 5 рубрик с максимальным количеством товаров. Если по тупому, то просто в цикле перебираем каждую рубрику и в каталоге смотрим сколько count у каждой. Но это получается что надо 10 запросов сделать к БД, что довольно накладно на мой взгляд. А как можно это упростить и можно ли?
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    SELECT a.*
    FROM table_part AS a, table_item AS b
    WHERE a.part_id = b.part_id
    GROUT BY(b.part_id)
    ORDER BY COUNT(*) DESC
    LIMIT 5
     
  3. Locker

    Locker Активный пользователь

    С нами с:
    12 авг 2006
    Сообщения:
    124
    Симпатии:
    0
    Чет немного не вкуриваю. Перевел на свой случай
    Код (Text):
    1. SELECT a.* FROM menu AS a, katalog2 AS b WHERE a.id = b.rid GROUP BY(b.rid) ORDER BY COUNT(*) DESC LIMIT 0,5;
    Пишет Invalid use of group function
     
  4. Locker

    Locker Активный пользователь

    С нами с:
    12 авг 2006
    Сообщения:
    124
    Симпатии:
    0
    Сделал так:
    PHP:
    1. <?
    2. require_once "inc/connect.php";
    3. $t = new Db;
    4. $t->create("katalog2");
    5. $res=$t->smartSelect("rid,count(id) as counts","group by rid","counts DESC","0,5");
    6. sort($res);
    7. for ($i=0; $i<count($res); $i++) {
    8.   $rids[$i]=$res[$i]["rid"];
    9. }
    10. $t->create("menu");
    11. $rubr=$t->select("nazv","id in (".implode(",",$rids).")","id","");
    12. echo "<ul>";
    13. for ($i=0; $i<count($rubr); $i++) {
    14.   echo "<li><a href=\"catalog/rubr/".$res[$i]["rid"].".htm\">".$rubr[$i]["nazv"]."</a> (".$res[$i]["counts"].")</li>";
    15. }
    16. echo "</ul>";
    17. ?>
    Насколько правильно?