2013-06-06 94 views
3

难道可能在GROUP_CONCAT与分隔逗号选择 并用逗号 这里我的MySQL样本的搜索中,CONCAT:PHP和MySQL GROUP_CONCAT与分隔逗号和搜索中,CONCAT用逗号

products_attributes_id |products_id| options_id|  options_values_id 
39     | 31  |  3  |   3 
35     | 30  |  2  |   2 
38     | 30  |  1  |   1 
40     | 31  |  2  |   2 
41     | 30  |  1  |   4 
42     | 30  |  1  |   5 
43     | 31  |  1  |   4 

我想到GROUP_CONCAT options_values_id

SELECT *,GROUP_CONCAT(options_values_id SEPARATOR '')FROM products_attributes GROUP由products_id

products_attributes_id | products_id | options_id | options_values_id | options_values_id 
35     | 30   | 2   | 2     | 2,1,4,5 
39     | 31   | 3   | 3     | 3,2,4 

现在我的问题是如何通过搜索(option_values_id和逗号)来查找product_id,如果我的值是1,2或2,4,那么我将只获得product_id = 30。 但是,如果我得到价值1,3我什么也得不到。由于PRODUCT_ID 30没有option_values_id 3 和PRODUCT_ID 31没有option_values_id 1.

我试试这个代码,但我不能得到的product_id

SELECT * , GROUP_CONCAT(options_values_id 
SEPARATOR ',') 
FROM `products_attributes` WHERE CONCAT(',',options_values_id,',') LIKE '%,1,2,%' 
GROUP BY products_id 
+0

也许有没有办法做到这一点,而不使用“GROUP_CONCAT”?你能给我们更多的背景信息吗? – Halcyon

回答

8

试试这个:

SELECT 
    products_id , 
    GROUP_CONCAT(options_values_id SEPARATOR ',') as ops 
FROM 
    products_attributes 
GROUP by 
    products_id 
HAVING 
    FIND_IN_SET('1',ops) 
    OR FIND_IN_SET('3',ops) 
+0

非常感谢您的帮助。但我宁愿使用和? hehe THANKs很多 – Jows

+0

不用担心:)高兴我可以帮忙也请不要忘记标记你接受的答案 – Stephan

+0

如何?我在这里很和蔼。投票需要15点声望? – Jows