MySQL COUNT (подзапрос) - PullRequest
       10

MySQL COUNT (подзапрос)

0 голосов
/ 06 мая 2011

Мой запрос MySQL:

 SELECT id, name, depth, restricted, order, parent_id,
    (SELECT COUNT(t2.id) AS count FROM #__webshop_product_color_dbar AS t2
        WHERE t2.product_id =
            (SELECT product_id FROM #__webshop_category_product AS t3
            WHERE t3.category_id = "0")
        AND available < 0 OR stock = "Y" OR infinite_amount = "Y"
    ) AS productcount
    FROM #__webshop_category AS t1
    WHERE parent_id = "'.$parent_id.'" AND depth = "'.$depth.'" AND restricted="N"
    ORDER BY id ASC

Моя проблема: количество всех продуктов = 2;если я использую "WHERE t2.product_id IN", он не работает.

В чем проблема?

(извините за мой плохой английский)

1 Ответ

0 голосов
/ 06 мая 2011

Подвыборы не связаны с t1.id. Следующие объединения восстанавливают эту ссылку.
Я не уверен на 100%, что вам нужно, без дополнительной информации об отношениях между таблицами, но она должна быть близкой.

SELECT t1.id, t1.name, t1,depth, t1.restricted, t1.order, t1.parent_id
  , COUNT(t2.id) as productcount
FROM #__webshop_category AS t1
LEFT JOIN #__webshop_product_color_dbar AS t3 on (t3.category_id = t1.id)
LEFT JOIN #__webshop_product_color_dbar AS t2 ON 
  (
  t2.product_id = t3.product_id AND t2.available < 0 
    OR stock = 'Y' OR infinite_amount = 'Y'
  )
WHERE t1.parent_id = "'.$parent_id.'" 
  AND t1.depth = "'.$depth.'" 
  AND t1.restricted = 'N'
GROUP BY t1.id

Обратите внимание, что GROUP BY уже заказывает элементы ASC, поэтому никаких дополнительных ORDER BY не требуется.

...