首页 > 解决方案 > mySQL 查询返回 3 列,我想从连接到逗号分隔字符串的列中获取值

问题描述

我需要从相应的 meta_key 列中具有“shipping”的 meta_value 列中获取值,并将它们连接成逗号分隔的行。

我对 SQL 有点陌生,所以请保持温柔。

在此处输入图像描述

我目前的查询是这样的:

SELECT wp_postmeta.post_ID, wp_postmeta.meta_key, wp_postmeta.meta_value, wp_posts.ID, wp_posts.post_status 
FROM wp_postmeta 
CROSS JOIN wp_posts 
WHERE wp_postmeta.post_ID= wp_posts.ID 
  AND wp_posts.post_status LIKE 'wc-processing' 
  AND (wp_postmeta.meta_key LIKE '%shipping%' OR wp_postmeta.meta_key LIKE '_order_total') 

标签: mysqlstringconcatenation

解决方案


您可以使用GROUP_CONCAT将字符串连接在一起。正如@kermit 所指出的,您应该使用 an INNER JOINnot a CROSS JOIN。我假设您希望将订单总额与运输详细信息分开,因此您还需要使用条件聚合。这个查询应该做你想做的事:

SELECT m.post_ID
     , GROUP_CONCAT(CASE WHEN m.meta_key LIKE '%shipping%' THEN m.meta_value END) AS shipping_info
     , MAX(CASE WHEN m.meta_key = '_order_total' THEN m.meta_value ELSE 0 END) AS order_total
FROM wp_postmeta m
INNER JOIN wp_posts p ON m.post_ID = p.ID 
WHERE p.post_status LIKE 'wc-processing' 
  AND (m.meta_key LIKE '%shipping%' OR m.meta_key LIKE '_order_total')

推荐阅读