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