[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбрать категорию где 0 товаров
lans8097
Добрый день подскажите что делаю не так.

Есть 3 таблици

1 category 1 000 записей
c_id
c_name

2 product 400 000 записей
p_id
p_name

3 category_to_product 1 500 000 отношений
c_id
p_id

Надо выбрать категорию где количество продуктов равно 0.

Делаю вот такой запрос

SELECT
`category`.*,
count(`product`.`p_id`) as `p_count`,
FROM `category`
LEFT JOIN category_to_productON (category.c_id = category_to_product.c_id)
JOIN product ON (product.p_id = category_to_product.p_id)
GROUP BY `category_id`.`c_id`


Почему-то в результате не все записи а только те у которых есть товары..... где я ошибся ?

McLotos
Смотрите, есть такой вариант.
1. Убираете 3 таблицу за ненадобностью
2. Создаете поле cat_id в таблице продуктов
Получится примерно так

CREATE TABLE `product` (
`id` int(11) NOT NULL,
`p_name` varchar(50) NOT NULL,
`cat_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `category` (
`id` int(11) NOT NULL,
`c_name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Выполняете запрос

select `category`.*, `product`.*
from `category`
left join `product` on `category`.`id`=`product`.`id`
where `product`.`id` is null


3. Радуетесь результату

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Valick
Цитата (McLotos @ 4.10.2016 - 06:23)
Убираете 3 таблицу за ненадобностью

с какого это перепугу?

_____________
Стимулятор ~yoomoney - 41001303250491
lans8097
Цитата (McLotos @ 4.10.2016 - 03:23)
Смотрите, есть такой вариант.
1. Убираете 3 таблицу за ненадобностью
2. Создаете поле cat_id в таблице продуктов
3. Делаете связь между таблицами
Получится примерно так

CREATE TABLE `product` (
  `id` int(11) NOT NULL,
  `p_name` varchar(50) NOT NULL,
  `cat_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `category` (
  `id` int(11) NOT NULL,
  `c_name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Выполняете запрос

select `category`.*, `product`.*
from `category`
left join `product` on `category`.`id`=`product`.`id`
where `product`.`id` is null


4. Радуетесь результату

Я был-бы рад, но мне дали именно такую базу именно с такой структурой =)....
Таким д****м я себя давно не чувствовал...
Увы товар может принадлежать хоть двадцатью категориям.
McLotos
Цитата (lans8097 @ 4.10.2016 - 09:28)

Увы товар может принадлежать хоть двадцатью категориям.

Это меняет ситуацию, надо подумать.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
Цитата (lans8097 @ 4.10.2016 - 09:38)
Надо выбрать категорию где количество продуктов равно 0.

SELECT c.*
FROM category AS c
LEFT JOIN category_to_product AS cp ON c.c_id=cp.c_id
WHERE cp.p_id IS NULL
McLotos
Цитата (kaww @ 4.10.2016 - 09:38)
SELECT c.*
FROM category AS c
LEFT JOIN category_to_product AS cp ON c.c_id=cp.c_id
WHERE cp.p_id IS NULL


Обогнал меня =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
lans8097
Цитата (kaww @ 4.10.2016 - 03:38)
Цитата (lans8097 @ 4.10.2016 - 09:38)
Надо выбрать категорию где количество продуктов равно 0.

SELECT c.*
FROM category AS c
LEFT JOIN category_to_product AS cp ON c.c_id=cp.c_id
WHERE cp.p_id IS NULL

По началу я так и сделал, но меня смутило фраза где 0 товаров а если то где 2 ? )).
Мне кажется что это уже у меня разыгрался перфикционист
S.Chushkin
Что в Вашей задаче есть "количество продуктов"?

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
lans8097
Цитата (S.Chushkin @ 4.10.2016 - 08:45)
Что в Вашей задаче есть "количество продуктов"?

Продукт это сущность таблицы product связанную по средствам category_to_product
S.Chushkin
Ещё раз: Что в Вашей задаче есть "количество продуктов"?

Можно сформулировать по другому: Что Вы подразумеваете/понимаете под понятием "количество продуктов"? (лучше, если "...понимает тот, кто поставил Вам эту задачу...")

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
lans8097
Цитата (S.Chushkin @ 4.10.2016 - 14:46)
Ещё раз: Что в Вашей задаче есть "количество продуктов"?

Можно сформулировать по другому: Что Вы подразумеваете/понимаете под понятием "количество продуктов"? (лучше, если "...понимает тот, кто поставил Вам эту задачу...")

А вот тут хз что у них там в голове XD
S.Chushkin
Вы хотите посчитать число сферических коней в вакууме?
Забавно.


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Kusss
Предположу, что нужно найти категории к которым нет привязки товаров (допустим, которые можно удалить)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.