使用 SQL 查询以 CSV 格式导出 WordPress 帖子和元信息

Posted

技术标签:

【中文标题】使用 SQL 查询以 CSV 格式导出 WordPress 帖子和元信息【英文标题】:Export WordPress Posts and Meta Information in CSV format using SQL Query 【发布时间】:2012-10-03 01:54:23 【问题描述】:

抱歉,这是duplicate of entry of this post,但我发现我没有得到正确的答案,不知道如何要求将其移至 SO?

我需要使用 CSV 格式的 SQL 查询导出所有 WordPress 帖子和相关元信息。我设法只导出了帖子,但意识到元信息在另一个表中。

有人能告诉我我会怎么做吗?

谢谢!

编辑:我已经尝试了许多插件,但没有一个适用于这种特定情况。我确实需要处理查询本身。谢谢

编辑:CSV 文件的最终结果应如下所示。在一行上,这些是我最终会得到的列。 (我将删除 CSV 中的附加列,我只是在这里给出一个缩短的版本)

post_content | post_title | **meta_key** | *meta_value* | **meta_key** | *meta_value* | **meta_key** | *meta_value* | **meta_key** | *meta_value* | **meta_key** | *meta_value* 

所以每行一个帖子,元信息在同一行。

编辑:使用 S-ha-dum,我设法找到了一些方法,但我有大约 12 个 meta_value > meta_key 值要从数据库中提取出来,所以我需要帮助来编写其余部分请查询

SELECT *,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Publisher' AND wp_postmeta.post_id = wp_posts.ID) as Publisher FROM wp_posts

【问题讨论】:

嗨!您找到解决方案了吗?面对同样的问题 看看下面选择的答案? 【参考方案1】:

尝试许多 CSV 导出插件。我使用this one 效果很好。

【讨论】:

感谢 SMacFadyen。但是我尝试过的所有 CSV 导出器都没有做我需要做的事情。在这种情况下,如上所述,将帖子和元数据导出到一个 CSV 文件中。 也发现exporter极度缺乏。【参考方案2】:

我认为您需要的一切都在 *_posts 和 *_postmeta 表中。

有两种方法可以做到这一点。首先,只需在 *_post 表上加入 *_postmeta 表。

"SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id"

您将希望枚举您的字段,而不是使用星号或课程。每个帖子最终都会有多行,您必须循环访问和组织。

第二,写子查询。

"SELECT *,(SELECT meta_value FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key = 'Publisher' AND $wpdb->postmeta.post_id = $wpdb->posts.ID) as Publisher,... FROM $wpdb->posts"

子查询在这种情况下应该执行得很好。再次枚举您的字段。

【讨论】:

谢谢 s_ha_dum!我很感激回到我身边。 SQL 根本不是我的强项。你能解释一下“枚举你的领域”是什么意思吗? 写出--'post_content','post_title',...你不需要整张桌子,所以不需要拉整张桌子。 S-ha-dum,如果我运行您的第一个选项,我会收到 SQL 语法错误。我将其粘贴在 phpMyAdmin 的 SQL Run SQL Box 中。 ("SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id") - 没有括号 我假设我需要替换 大括号中的内容? 我想我需要这样写出来......? SELECT * FROM wp_posts LEFT JOIN wp_postmeta ...只是不确定如何写出其余部分。【参考方案3】:

最后一位朋友设法帮助我解决了我的问题。这是他将所有带有元信息的帖子导出到 CSV 文件的最后一个 SQL 查询。

SELECT DISTINCT
post_title
, post_content
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Asking Price (US\$)' AND wp_postmeta.post_id = wp_posts.ID) as "Asking Price (US\$)"
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Asking Price (ZAR)' AND wp_postmeta.post_id = wp_posts.ID) as "Asking Price (ZAR)"
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Author' AND wp_postmeta.post_id = wp_posts.ID) as Author
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Binding' AND wp_postmeta.post_id = wp_posts.ID) as Binding
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Book Condition' AND wp_postmeta.post_id = wp_posts.ID) as "Book Condition" 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Book Number' AND wp_postmeta.post_id = wp_posts.ID) as "Book Number" 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Book Type' AND wp_postmeta.post_id = wp_posts.ID) as "Book Type"
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Edition' AND wp_postmeta.post_id = wp_posts.ID) as  Edition
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Illustrator' AND wp_postmeta.post_id = wp_posts.ID) as Illustrator 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Inscription' AND wp_postmeta.post_id = wp_posts.ID) as Inscription 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'ISBN' AND wp_postmeta.post_id = wp_posts.ID) as  ISBN
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Jacket Condition' AND wp_postmeta.post_id = wp_posts.ID) as "Jacket Condition"
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Location' AND wp_postmeta.post_id = wp_posts.ID) as  Location
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Published Place' AND wp_postmeta.post_id = wp_posts.ID) as "Published Place"
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Published Year' AND wp_postmeta.post_id = wp_posts.ID) as "Published Year" 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Publisher' AND wp_postmeta.post_id = wp_posts.ID) as Publisher 
,(SELECT meta_value FROM wp_postmeta WHERE wp_postmeta.meta_key = 'Size' AND wp_postmeta.post_id = wp_posts.ID) as Size
FROM wp_posts
WHERE post_type = 'post' 
ORDER BY
post_title
, post_content

感谢大家的意见!

【讨论】:

这对我不起作用,我总是得到“查询错误(1242):子查询返回超过 1 行”,但这个答案对我有用:***.com/a/24517188/214500【参考方案4】:

自定义字段内联 SQL 导出查询

我想出了一个看起来很激烈的查询。它使用列中的自定义字段提取帖子,内联。请注意,查询中的“Concat”是在某些文本中欺骗相关帖子,您可以自行决定添加更多自定义字段。我的 SQL 应用程序(Sequel Pro)有一个 CSV 导出功能,我在查询远程数据库后使用它。工作很好。

SELECT *

FROM (

    SELECT 
        `wp_posts`.`ID` , 
        `wp_posts`.`post_title` AS `Title`,
        `wp_posts`.`post_date` AS `Date`,

        MAX( CASE WHEN `wp_postmeta`.`meta_key` = 'useremail'
        THEN `wp_postmeta`.`meta_value`
        END ) AS `Email`,

        MAX( CASE WHEN `wp_postmeta`.`meta_key` = 'usercell'
        THEN `wp_postmeta`.`meta_value`
        END ) AS `Cell Phone`,

        concat('http://yoururl.com/?p=',`wp_posts`.`ID`) as `URL`

    FROM `wp_posts`

    LEFT JOIN `wp_postmeta` ON ( `wp_posts`.`ID` = `wp_postmeta`.`post_id` )

    WHERE `wp_posts`.`post_status` = 'publish'

    AND `wp_posts`.`post_type` = 'customposttype'

    GROUP BY `wp_posts`.`ID`

    ORDER BY `wp_posts`.`post_date` DESC

) AS `t` WHERE 1 =1

结果:

【讨论】:

以上是关于使用 SQL 查询以 CSV 格式导出 WordPress 帖子和元信息的主要内容,如果未能解决你的问题,请参考以下文章

数据从 SQL Developer 导出到 CSV

使用 SQL 将数据库导出为 .CSV

plsql怎么导出csv

如何在 SQL Server Management Studio 中以“真实”CSV 格式获取导出输出?

访问 sql 查询以连接行

以编程方式运行查询并将其导出为 DataGrip 中的 CSV 文件