Как запросить запись, имеющую много связанных строк в другой таблице, для просмотра в виде одной строки

#mysql #phpmyadmin

Вопрос:

У меня есть wp_posts столик:

 id
post_title
post_status
post_type
 

и wp_postmeta стол:

 meta_id
post_id
meta_key
meta_value
 

Я хочу запросить эти таблицы, чтобы они были представлены как:

 post_id |     a_meta_key_from_postmeta_col             | another_meta_key
--------------------------------------------------------------------------------------
   1    |    value_of_the_meta_key_assotated           | value_of_the_other_key_assotated_with_this_post
   2    |    ......                                    | ...
 
 SELECT wp_posts.id, wp_postmeta.meta_key, wp_postmeta.meta_value 
FROM `wp_posts` 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_posts.post_type='foo' 
AND post_status='publish' 
AND (wp_postmeta.meta_key='some_key' 
OR wp_postmeta.meta_key='another_some_key';
 

Это и есть результат

 id     | meta_key         | meta_value
 1     | some_key         | some_value
 1     | another_key      | another_value
 2     | some_key         | some_value
 ...   | ...              |   ...
 

Это не то, чего я хочу.

(Моя конечная цель — экспортировать это в файл csv)

Комментарии:

1. Пожалуйста, покажите, чего вы ДЕЙСТВИТЕЛЬНО хотите. Не расплывчатое обобщение; приведите несколько конкретных примеров данных с точными результатами, которые вам нужно экспортировать из этого конкретного примера.

2. @MIA ты проверила мое решение ?

Ответ №1:

Если вы хотите экспортировать в csv-файл, вам следует использовать into outfile инструкцию.

 SELECT wp_posts.id, wp_postmeta.meta_key, wp_postmeta.meta_value 
FROM wp_posts
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_posts.post_type='foo' 
AND post_status='publish' 
AND wp_postmeta.meta_key='some_key' 
OR wp_postmeta.meta_key='another_some_key' 
into outfile './export.csv' fields terminated by ';' lines terminated by 'n';
 

Если вы хотите добавить текст перед каждым результатом столбца, используйте CONCAT_WS() : https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat-ws

 SELECT wp_posts.id, CONCAT_WS("_","a_key_from",wp_postmeta.meta_key) ,CONCAT_WS("_","a_value_from",meta_value)  
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_posts.post_type='foo' 
AND post_status='publish' 
AND wp_postmeta.meta_key='some_key' 
OR wp_postmeta.meta_key='another_some_key' 
into outfile './export.csv' fields terminated by ';' lines terminated by 'n';
 

Результат второго запроса будет выглядеть следующим образом:
введите описание изображения здесь

outfile Пример инструкции Into:

введите описание изображения здесь

Комментарии:

1. Я начинаю уставать You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'into outfile './export.csv' fields terminated by ';' lines terminated by 'n' LI' at line 8

2. @MIA какой запрос вы используете?

3. Я получаю одну и ту же ошибку в обоих запросах.

4. @MIA у вас есть ( после того, как ваш второй AND я изменился, попробуйте сейчас и скажите, работает ли это

5. сейчас: Unexpected ordering of clauses. (near "FROM" at position 67)