MySQL запрос возвращает 3 столбца, я хочу получить значения из одного столбца, объединенные в строку через запятую - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно получить значения из столбца meta_value, для которых есть "shipping" в соответствующем столбце meta_key, и объединить их в строку через запятую.

Я немного новичок в 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') 

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вы можете использовать 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')
0 голосов
/ 12 ноября 2018

это должно сработать немного сложнее, чем на сервере sql, но достаточно просто

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
0 голосов
/ 12 ноября 2018

Итак, вот ваш запрос (обратите внимание, как я его пишу - я считаю, что хорошее форматирование 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'
        ) 

Также обратите внимание: одинарные и двойные кавычки означают разные вещи в разных базах данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...