PHP 和 MySQL GROUP_CONCAT 带分隔符逗号并搜索逗号连接的位置
Posted
技术标签:
【中文标题】PHP 和 MySQL GROUP_CONCAT 带分隔符逗号并搜索逗号连接的位置【英文标题】:Php and MySQL GROUP_CONCAT with separator comma and search where concat by comma 【发布时间】:2013-06-02 06:33:59 【问题描述】:是否可以在 Group_concat 中使用分隔符逗号进行选择 并用逗号搜索 where concat 这是我的mysql示例:
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 by 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
现在我的问题是如果我的值为 1,2 或 2,4,我将如何通过搜索(带有逗号的 option_values_id)找到 product_id,那么我只会得到 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
【问题讨论】:
也许有一种方法可以在不使用GROUP_CONCAT
的情况下做到这一点?你能给我们更多的背景信息吗?
【参考方案1】:
试试这个:
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)
【讨论】:
“试试这个”答案在 Stack Overflow 上的价值很低,因为它们对教育/授权成千上万的未来研究人员几乎没有作用。以上是关于PHP 和 MySQL GROUP_CONCAT 带分隔符逗号并搜索逗号连接的位置的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中完成 MYSQL 的 Group_Concat [重复]
Mysql group_concat 的重复键和 1 个查询中多列的重复计数(查询优化)