我的查询看起来是这样的:
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;
options_01 结果:
选项 a,40;选项 a,50;选项 b,60;选项 b,70
options_2 结果:
选项a,选项b;40,50,60,70
和 options_03:
选项 b;60,70
我想创建这个:
选项 a;40,50|选项 b;60,70
或者我需要在查询中使用 PHP 创建它吗?希望有人能帮助我。
最佳答案
我不知道你的数据库/表的结构,但我认为你可以像这样修改你的查询(对你的案例进行所有修改):
SELECT
GROUP_CONCAT(options_try SEPARATOR '|') as your_field
FROM (
SELECT
CONCAT(optlan.option_label, ';', GROUP_CONCAT(ovl.value SEPARATOR ",")) AS options_try
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 optlan.option_label;
) x1
请注意查询末尾的组。如果您不按“主要”字段对结果进行分组,则无法使用 group_concat。
关于php - GROUP_CONCAT 创建下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691257/