За последние 24 часа нас посетил 33861 программист и 1318 роботов. Сейчас ищут 1027 программистов ...

MySQL, как посчитать подкатегории ?

Тема в разделе "PHP для новичков", создана пользователем desertFox, 13 окт 2015.

  1. desertFox

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

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Добрый день. Есть одна таблица с категориями и подкатегориями.

    Структура таблицы примерно следующая:

    Код (PHP):
    1. id_cat | parent_id | title
    2. ---------------------------------------
    3. 1      | 0         | Категория 1
    4. ---------------------------------------
    5. 2      | 1         | Подкатегория 1
    6. ---------------------------------------
    7. 3      | 1         | Подкатегория 2
    8. ---------------------------------------
    9. 4      | 0         | Категория 2
    10. ---------------------------------------
    11. 5      | 4         | Подкатегория 1
    12. ---------------------------------------
    13. 6      | 4         | Подкатегория 2
    14. ---------------------------------------
    15. 7      | 4         | Подкатегория 3
    16. ---------------------------------------
    17. 8      | 0         | Категория 3
    Как в одном запросе получить название категории и количество её подкатегорий?

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Никак. При такой структуре вообще подкатегории только рекурсией можно получить. Чтоб можно было легко и запросами, надо освоить Nested Sets или Materialized Path, или ещё какие-то аналоги вроде были.
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    а почему бы не создать две таблицы держать ид категории в подкатегории и все легко будет получаться?
     
  4. desertFox

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

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    почти получилось что хотел:

    Код (PHP):
    1. $sql = "SELECT article_cats.title, COUNT(article_cats.id_cat) AS count 
    2.        FROM article_cats, article_cats AS tb
    3.           WHERE article_cats.id_cat=tb.parent_id
    4.           GROUP BY article_cats.id_cat
    5.           ORDER BY article_cats.id_cat ASC"; 
    НО! Если в категории нет подкатегорий, то она не выводится :(, хотелось чтобы она тоже выводилась.

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color][size=85][color=green]Добавлено спустя 56 минут 15 секунд:[/color][/size]остановился на таком варианте:
    2.  
    3. [code=php]$sql = "SELECT title, id_cat AS i, (SELECT COUNT(*) FROM article_cats WHERE i=parent_id) AS count
    4. FROM article_cats
    5. ORDER BY id_cat ASC";
    в принципе задачку решил не переделывая таблиц в базе
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    desertFox, ну если у вас только один уровень подкатегорий, то пойдёт. А если больше - будет врать. Внуков ваша конструкция считать не будет. Так что гуглите Nested Sets, к тому же для PHP тысяча библиотек, которые реализуют эту технологию