2012-02-21 5 views
-1

Что-то не так с моим MySQL-запросом ниже, но я не могу найти проблему. Он не возвращает никаких ошибок, но запрос ниже должен возвращать 1 строку, но она не возвращает ничего.Запрос MySQL возвращает 0 строк, пока он должен возвращать один

В таблице «fws_product» содержатся все продукты. Таблица 'webits_product_has_kenmerken' содержит спецификации продукта.

SELECT fws_product.* 
FROM webits_product_has_kenmerken 
LEFT JOIN fws_product ON webits_product_has_kenmerken.product_id = fws_product.ID 
WHERE fws_product.CATID = 11 
AND ( 
(webits_product_has_kenmerken.kenmerk_id = 8 AND webits_product_has_kenmerken.kenmerk_value = 'Buddha to Buddha') 
AND 
(webits_product_has_kenmerken.kenmerk_id = 19 AND webits_product_has_kenmerken.kenmerk_value = '10 mm') 
) 

Заранее благодарен!

+1

, что третий 'AND' не должно быть' OR'? –

+0

Это действительно возвращает результаты, но я не хочу получать продукты, которые соответствуют обоим спецификациям, а не только одному из двух. Это запрос для фильтра продукта. – Boyd

+0

oh ... хорошо, в следующий раз укажите, что в вопросе: P –

ответ

2

Это выглядит немного неприятный, но следующие должны делать, как вы просили

SELECT 
    p.* 
FROM fws_product AS p 

INNER JOIN webits_product_has_kenmerken AS ps8 
    ON ps8.product_id = p.ID 
    AND ps8.kenmerk_id = 8 
    AND ps8.kenmark_value = 'Buddha to Buddha' 

INNER JOIN webits_product_has_kenmerken AS ps19 
    ON ps19.product_id = p.ID 
    AND ps19.kenmerk_id = 19 
    AND ps19.kenmark_value = '10 mm' 

WHERE p.CATID = 11 

Это еще один возможный вариант, который может сделать работу , но все еще ощущается очень неприятно

SELECT 
    p.* 
FROM fws_product AS p 
INNER JOIN (
    SELECT 
     product_id, 
     COUNT(*) AS numMatches 
    FROM webits_product_has_kenmerken 
    WHERE (kenmerk_id,kenmerk_value) IN (
      (8,'Buddha to Buddha'), 
      (19,'10 mm') 
     ) 
    GROUP BY product_id 
    HAVING numMatches = 2 
) AS ps 
ON ps.product_id = p.ID 

WHERE p.CATID = 11 
+0

Спасибо вам большое! Это именно то, что мне нужно! – Boyd

0

я думаю, вам нужно следующее:

SELECT fws_product.* 
FROM webits_product_has_kenmerken 
LEFT JOIN fws_product ON webits_product_has_kenmerken.product_id = fws_product.ID 
WHERE fws_product.CATID = 11 
AND ( 
(webits_product_has_kenmerken.kenmerk_id = 8 AND webits_product_has_kenmerken.kenmerk_value = 'Buddha to Buddha') 
OR 
(webits_product_has_kenmerken.kenmerk_id = 19 AND webits_product_has_kenmerken.kenmerk_value = '10 mm') 
) 
+0

Это действительно возвращает результаты, но я не хочу получать продукты, которые соответствуют как спецификациям, так и не только одному из двух. Это запрос для фильтра продукта. – Boyd

0

checke эти столбцы для значений NULL:

fws_product.CATID 
webits_product_has_kenmerken.kenmerk_id 
webits_product_has_kenmerken.kenmerk_value 

каждое сравнение с NULL исключает строку из reult

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