php - GROUP_CONCAT 创建下拉列表

标签 php mysql

我的查询看起来是这样的:

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/

相关文章:

php - 如何从多个对象构建流/源?

php - Nginx 在不同位置托管应用程序

mysql - 如何结合 left join 和 where join(旧式逗号连接)?

sql - mysql 左连接和求和分组依据

mysql - 提高删除重复项的查询性能

mysql全文搜索不首先返回最相关的结果

php - 如何让 mysqli 在 SQL 语句中使用 DELIMITER?

php - Magento 尝试分配过多的内存

php - SQL 查询似乎不起作用

mysql - SQL 返回 2 个值重复的所有行