2012-04-05 2 views
0

Редактирование: Теперь по какой-либо причине каждый продукт возвращается только один раз, а не в зависимости от того, сколько вариантов он имеет? Есть идеи? (Запрос я использую последний запрос я перечислил)Результаты, уменьшенные при добавлении четвертого столового соединения

Вот моя три таблицы объединяющего запроса

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 
ORDER by xp.product DESC 

Теперь здесь все отлично работает, я получаю около 2000 результатов, все организовано и расположено правильно ,

Теперь я хотел бы добавить четвертую таблицу для запуска подсчета числа xi.optionid за xi.id, но по какой-то причине я получаю около 200 результатов и не могу понять, почему. Вот запрос я пытаюсь запустить

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name, count(xi.optionid) as cnt 
    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.product 
    ORDER by xp.product DESC 

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

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) 

Запрос настоящее время я использую -

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name, count(xi.optionid) as cnt 
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 
LEFT JOIN xcart_images_D xi ON xi.optionid = xco.optionid 
GROUP BY xp.product 
ORDER by xp.product DESC 
+0

Каково количество записей в таблице изображений –

+0

в первом запросе, у вас нет оператора GROUP BY. Кроме того, вы используете разные типы JOIN. –

ответ

1

Попробуйте использовать LEFT OUTER JOIN вместо ,

select xp.productid, 
    xp.product, 
    xc.classid, 
    xco.optionid, 
    xco.option_name, 
    count(xi.optionid) as cnt 
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 
left outer join xcart_images_D xi on xi.optionid = xco.optionid 
group by xp.product 
order by xp.product desc 
+0

По какой-то причине каждый продукт появляется только один раз, а не в зависимости от того, сколько вариантов он имеет? Есть идеи? – Eric

+1

Вы группируете xp.product. Если у одного продукта есть mabny productids, и вы хотите увидеть их все, тогда 'group by xp.product, xp.productid'. – RedFilter

1

Пользователь a Левый член на последнем столе.

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