Forum Webscript.Ru
Общие => Базы данных => Тема начата: от 15 Июля 2002, 21:12:44
-
Есть три таблицы:
category: id(int) | name(varchar) | descript(varchar) | parent(int)
product: id(int) | name(varchar) | descript(varchar)
prod_cat: prod_id(int) | cat_id(int)
Один и тот же товар может находиться в разных категориях.
Как правильно организовать запрос в БД, чтобы сформировать дерево категорий так:
Продукты(7)
Фрукты(2)
Овощи(5)
Бытовая техника(120)
Телевизоры(20)
и т. д.
Очень признателен за ответы.
-
Привет. В принципе я БД занемаюсь с (поза х 3-5раз)-вчера, но всеже попробую сейчас кое-что намутить, правда не знаю, будет ли оно работать,... должно вроде.
Итак, следи за мыслью:
SELECT name,COUNT(*) FROM category WHERE id=( \\
SELECT cat_id FROM prod_cat WHERE prod_id=( \\
SELECT id FROM product WHERE name=\'тому,что ты ищеш\' \\
) \\
) \\
GROUP BY name;
Вот так вот. Два вложеных селекта. Напиши, получилось ли.
-
В догонку
Еще раз привет.
Я только-что сам проверил что написал, и скажу тебе следующее: в МюСКЛ 3.х как минимум это работать не будет!(Он не поддерживает вложеных запросов,sub-query(sub-select) называется). Насчет 4.0-го - не знаю, сегодня наверное буду ставить у себя, а там посмотрим, если что- напишу.
А пока тебе прийдется в три подхода искать(если ты работаеш в 3.х) Удачи.
-
Вроде так:
SELECT c.name, count(p.*) FROM category c, prod_cat p WHERE p.cat_id=c.id GROUP BY c.name;
Проверь работает, нет.
-
select c.name,c.count(distinct p.*) FROM category c,prod_cat WHERE p.cat_id=c.id GROUP BY c.name
-
Привет, это опять я.
Значит, ставил я 4.02 - там саб-селекты тоже не фурычят, говорят, что будут реализованы с версии 4.1, а пока вот тебе рабочий и провереный запрос на нужный товар:
select product.name as \'name\', product.description as \'description\', category.name as \'category\',count(*) as \'num\' from category, prod_cat, product where category.id=prod_cat.cat_id and prod_cat.prod_id = product.id and product.name=\'somthing needed\' group by category.name;
Доработай как надо, я писал чтоб ты понял.
Удачи.