2012-04-04 4 views
0

Я пытаюсь создать список (из четырех таблиц) продуктов, classid, optionid, 'images'. У каждого продукта может быть много ClassID (от одного до многих), каждый ClassID может иметь много OptionID, и каждый OptionID может иметь много изображений. Наконец, для таблицы images (xcart_images_D) я хотел бы подсчитать(), сколько изображений имеет каждый идентификатор productID. Как я могу эффективно запросить всю эту информацию без использования нескольких операторов?Три вопроса о соединении таблиц со счетом

Вот основная информация для каждой из таблиц

xcart_products 
    + productid* 
    + product 
xcart_classes - 
    + classid* 
    + productid (xcart_products.productid) 
xcart_class_options - 
    + optionid* 
    + classid (xcart_classes.classid) 
    + option_name 
xcart_images_D - 
    + imageid* 
    + optionid (xcart_class_options.optionid) 
+ id (xcart_products.productid) 

* primary/foreign key 

У меня есть три таблицы присоединиться работать, но я не могу получить таблицу xcart_images_D работать и я не понимаю, как я бы осуществить подсчет. Может ли кто-нибудь указать мне в правильном направлении?

Для чего это стоит здесь мой три стола присоединиться

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name 
FROM xcart_products xp 
JOIN xcart_classes xc ON xp.productid = xc.productid and xc.class = 'Color' 
JOIN xcart_class_options xco ON xc.classid = xco.classid 
WHERE xc.class = 'Color' 
ORDER by xp.productid DESC 

Когда я пытаюсь добавить следующие строки число результатов снижаются примерно в два раза.

JOIN xcart_images_D xi ON xi.optionid = xco.optionid 
GROUP BY xp.productid 

ответ

1
SELECT xp.productid, count(xi.imageid) 
FROM xcart_products xp 
INNER JOIN xcart_classes xc ON xp.productid = xc.productid AND xc.class = 'Color' 
INNER JOIN xcart_class_options xco ON xc.classid = xco.classid 
INNER JOIN xcart_images_D xi ON xi.optionid = xco.optionid 
GROUP BY xp.productid 
ORDER by xp.productid DESC 
+0

Спасибо за помощь. По какой-то причине, когда я добавляю счет, количество полученных результатов сокращается с 2000 до 200. Любая идея о том, почему? – Eric

Смежные вопросы