使用 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 * FROMwp_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 帖子和元信息的主要内容,如果未能解决你的问题,请参考以下文章