Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 组_CONCAT以创建下拉列表_Php_Mysql - Fatal编程技术网

Php 组_CONCAT以创建下拉列表

Php 组_CONCAT以创建下拉列表,php,mysql,Php,Mysql,我的问题是这样的: SELECT p.product_id, Group_concat(DISTINCT Concat( optlan.option_label, ',', ovl.value) SEPARATOR ';' ) AS options_01, Concat(Group_

我的问题是这样的:

SELECT p.product_id, 
       Group_concat(DISTINCT Concat( optlan.option_label, ',', ovl.value) 
       SEPARATOR ';' 
       )                                                                     AS 
       options_01, 
       Concat(Group_concat(DISTINCT optlan.option_label), ';', 
       Group_concat(DISTINCT ovl.value))                                     AS 
       options_02, 
       Concat_ws(';', optlan.option_label, Group_concat(DISTINCT ovl.value)) AS 
       options_03 
FROM   products p 
       JOIN category c 
         ON p.category_id = c.category_id 
       LEFT JOIN options_categories opcat 
              ON opcat.category_id = c.category_id 
       LEFT JOIN options opt 
              ON opt.option_id = opcat.option_id 
       LEFT JOIN options_lang optlan 
              ON optlan.option_id = opt.option_id 
                 AND optlan.lang_id = 'NL' 
       LEFT JOIN option_values ov 
              ON ov.option_id = opt.option_id 
       LEFT JOIN option_values_lang ovl 
              ON ovl.value_id = ov.value_id 
                 AND ovl.lang_id = 'NL' 
WHERE  p.product_id = '25' 
GROUP  BY p.product_id;
选项01结果:

方案a,40;备选方案a,50;备选案文b,60;选项b,70

选项2结果:

方案a、方案b;40,50,60,70

及选项03:

选项b;60,70

我想创建以下内容:

选项a;40,50 |方案b;60,70


或者我需要在查询中使用PHP创建它吗?希望有人能帮助我。

我不知道数据库/表的结构,但我认为您可以这样修改查询(对您的案例进行所有修改):


请注意查询末尾的组。如果不按“main”字段对结果进行分组,就不能使用group_concat。

也许我确实让我的问题变得复杂了,因为我可以更容易地完成

假设我必须:

表1:options=>option\u id和option\u标签 表2:values=>value\u id、option\u id和value

CREATE TABLE `options` (
`option_id` int(5) UNSIGNED NOT NULL,
`option_label` varchar(100) NOT NULL DEFAULT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

CREATE TABLE `values` (
`value_id` int(5) UNSIGNED NOT NULL,
`option_id` int(5) UNSIGNED NOT NULL ,
`value` varchar(100) NOT NULL DEFAULT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
表选项: 插入
选项
选项id
选项标签
)值 (1,“方案a”), (2,“备选方案b”)

表值: 插入
选项\u值
值\u id
选项\u id
)值 (1,1,'val 1a'), (2,1,'val 2a'), (3,1,'val 3a'), (4,2,'val 1b'), (5,2,'val 2b')

现在查询应该是这样的:

SELECT
 GROUP_CONCAT ........... AS all_options
FROM options o
JOIN values v
ON o.option_id = v.option_id
GROUP BY o.option_id 
结果应该是这样的:

所有选项 备选方案a;val 1a、val 2a、val 3a |选项b;val 1b,val 2b


希望这有意义

怀疑,最好在php端处理输出数据。是的,我想,当然可以使用mysql对您想要的数据进行分组(我不知道您的表的结构),但这看起来很糟糕,很难理解。@voodoo417:意思是我将标签与它们的值结合起来。因此,例如标签(选项a、选项b等)和表值(50、60、70、80等)中的前两个来自选项a,因此结果必须是:(选项a;50、60 |选项b;70、80 |等等……)感谢您的帮助,但您的查询给出了一个错误。我在脚本中做分组。是的,这很正常,因为我写的时候不知道表的结构,所以我无法测试它是否有效。我的回答只会解释如何组织过滤器,但最终的修改必须由您完成;)我明白你的意思,但如果是这样,我会把我的“问题”说得更清楚。我试着在下面解释,而不是评论
SELECT
 GROUP_CONCAT ........... AS all_options
FROM options o
JOIN values v
ON o.option_id = v.option_id
GROUP BY o.option_id