社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

mysql查询返回3列,我想从连接成逗号分隔字符串的一列中获取值

user10638179 • 4 年前 • 226 次点击  

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

我对SQL有点不在行,所以请温柔一点。

enter image description here

我现在的问题是:

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') 
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41252
 
226 次点击  
文章 [ 3 ]  |  最新文章 4 年前
quealegriamasalegre
Reply   •   1 楼
quealegriamasalegre    5 年前

这应该比在sql server上更容易实现

create table if not exists test(col1 varchar(10),col2 varchar(10), col3 varchar(10));
insert into test values("this","is","test");
select concat(col1,",",col2,",",col3) as csvCol from test

交付

csvCol
this,is,test
Nick edhdz1
Reply   •   2 楼
Nick edhdz1    5 年前

你可以使用 GROUP_CONCAT 把线连在一起。正如@kermit指出的,您应该使用 INNER JOIN 不是一个 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')
kermit
Reply   •   3 楼
kermit    5 年前

所以,这是您的查询(请注意我是如何编写的—我发现良好的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') 

这是我想你想要的(你用 MySQL concat function ):

Select
   concat(
        wp_postmeta.meta_key, ',',
        wp_postmeta.meta_value
    ) as formatted_row
FROM 
    wp_postmeta 
INNER JOIN 
    wp_posts 
ON
    wp_postmeta.post_ID = wp_posts.ID 
WHERE 
    wp_posts.post_status LIKE 'wc-processing' 
    AND (
           wp_postmeta.meta_key LIKE '%shipping%' 
           OR wp_postmeta.meta_key LIKE '_order_total'
        ) 

另请注意:单引号和双引号在 different databases .