2014-03-02 46 views
0

我試圖找到與分類列表連接與此查詢的所有產品:MySQL查詢()犯規的工作

SELECT p.id, product_name, added_date 
FROM products p, products_to_categories ptc 
WHERE ptc.category_id in ("89,88,83,87,84,85,86,82") 
AND ptc.product_id=p.id and p.active="1" 
group by p.id 

如果我切的條件AND ptc.product_id=p.id返回行 - 錯行的活動狀態。 使用1個查詢獲取正確信息的正確方法是什麼? - 有可能嗎? 感謝

+0

「active」列的'datatype'是什麼? – sarwar026

+0

active is enum('0','1') – thecore7

+0

在ENUM中使用數字字符串通常是一個糟糕的主意。 – Barmar

回答

4

不要引用類別ID列表:

SELECT p.id, product_name, added_date 
FROM products p 
JOIN products_to_categories ptc ON ptc.product_id=p.id 
WHERE ptc.category_id IN (89, 88, 83, 87, 84, 85, 86, 82) 
AND p.active="1" 
GROUP BY p.id 
+0

夥計們,我刪除了引號並獲得了1行,但仍然沒有得到完整的正確結果,我嘗試了@ Barmar的查詢並仍然...還有什麼可能? – thecore7

+0

請張貼一些示例數據和預期結果。 – Barmar

+0

您的查詢是好的,只是我的錯/複製/粘貼..我接受爲答覆,謝謝 – thecore7

1

嘗試刪除在IN條款引用和p.active如果主動是int/bool

$q='SELECT p.id, product_name, added_date 
FROM products p, products_to_categories ptc 
WHERE ptc.category_id in (89,88,83,87,84,85,86,82) 
AND ptc.product_id=p.id and p.active=1 
group by p.id'; 
0

不要與封裝支架的所有類別。 MySQL將其解釋爲一個單獨的類別。封裝每個類別,例如「89」, 「90」, 「91」。您也可以完全省略括號,因爲它是您查詢的整數。

如果它們是字符串,例如: 「一二三」。