首页 > 解决方案 > 对相似的 meta_key 值进行分组并使用 meta_value 数据创建结果集

问题描述

我的字段如下所示:

元密钥 元值
schedule_1_date 2021/2/7
schedule_1_lesson 100
schedule_2_date 2020/12/30
schedule_2_lesson 105
schedule_3_date 2021/2/8
schedule_3_lesson 90
schedule_4_date 2021/5/10
schedule_4_lesson 91

我想选择满足条件的数据:

例如,在上面的条件下,我会得到这些数据:

元密钥 元值
schedule_1_date 2021/2/7
schedule_1_lesson 100
schedule_3_date 2021/2/8
schedule_3_lesson 90

到目前为止我尝试过的代码

SELECT * FROM 'table_name' WHERE (meta_key LIKE 'schedule_%_date' AND meta_value IN ('2021/02/07','2021/02/08')) OR (meta_key LIKE 'schedule_%_lesson')

标签: mysqlgroupingmeta-key

解决方案


您可以使用REGEXP运算符来筛选meta_key遵循模式的行^schedule_[0-9]+_date$。在派生表中,还过滤meta_value此类行。用于从该行replace()中删除非数字部分。meta_key将该派生表连接到实际表。在该子句中,您可以使用派生表中的 s 和数字部分ON构建想要的 s。meta_keyconcat()meta_key

SELECT t1.meta_key,
       t1.meta_value
       FROM elbat t1
            INNER JOIN (SELECT replace(replace(meta_key,
                                               'schedule_',
                                               ''),
                                       '_date',
                                       '') n
                               FROM elbat t2
                               WHERE t2.meta_key REGEXP '^schedule_[0-9]+_date$'
                                     AND t2.meta_value IN ('2021/2/7',
                                                           '2021/2/8')) n
                       ON t1.meta_key IN (concat('schedule_', n.n, '_date'),
                                          concat('schedule_', n.n, '_lesson'));

db<>小提琴


推荐阅读