MySQL 查询以获取 post_id 和特征图像 URL
Posted
技术标签:
【中文标题】MySQL 查询以获取 post_id 和特征图像 URL【英文标题】:MySQL query to get post_id and feature image URL 【发布时间】:2018-05-18 12:45:02 【问题描述】:WordPress 将帖子和帖子的特色图片视为两个单独的帖子,这似乎无法创建将帖子和帖子的图像 URL 放在同一行的 SELECT 查询,如下所示:
post_id imageURL
100 [URL]
如何合并 mysql 表中没有具有共同值的列的两行?一列中的值与另一列中的值相关联。
meta_id post_id meta_key meta_value
100 250 _thumbnail_id 101
101 255 _wp_attached_file [URL]
...得到这样的结果
post_id imageURL
100 [URL]
自从这个问题在这个网站上得到回答后,WordPress 似乎已经改变了它的数据库结构。
当“Group by
”不可用时,我试图了解 MySQL 从一行中获取值并将其显示在另一行中的原理。
在观看视频、反复试验、在此处阅读答案的数小时后,这个查询只让我解决了一半,但帖子 ID 或图片 URL 总是丢失。我无法合并两行以将帖子与其图片 URL 合并。
SELECT * FROM `wp_postmeta`
INNER JOIN wp_posts on wp_posts.id = wp_postmeta.post_id
WHERE wp_postmeta.meta_key = "_wp_attached_file"
ORDER BY `wp_postmeta`.`post_id` DESC
请帮忙。可能有一些简单的语法来实现这一点,我错过了。查询是通过 WP API 传入的,因此使用原始 SQL 查询,而不是 WordPress 中可用的函数。
【问题讨论】:
您只显示了wp_postmeta
表。 wp_posts
表是什么?您是否选择meta_id
为post_id
?
好问题@aaron。 wp_posts 表确实包含与 WordPress 页面相关的所有图像,但据我所知,wp_posts 表无法识别帖子的特色图像(主图像)。它列出了所有相关的图像(它也认为是帖子),无论图像是否嵌入到正文中,或者它是否是主要的“特色”图像。我想你的第二个问题是你的手指。请参阅下面我对 raunak-gupta 的回复。
我没有看到你的回复。
【参考方案1】:
你正在尝试根据post_id
和meta_value
的值来获取数据,所以这可以通过使用Self JOIN来实现
这里是 MySQL 查询示例
SELECT p.id AS post_id, pm2.meta_value AS URL
FROM `wp_posts` AS p
INNER JOIN `wp_postmeta` AS pm1 ON p.id = pm1.post_id
INNER JOIN `wp_postmeta` AS pm2 ON pm1.meta_value = pm2.post_id
AND pm2.meta_key = '_wp_attached_file'
AND pm1.meta_key = '_thumbnail_id'
ORDER BY p.id DESC;
希望这会有所帮助!
【讨论】:
谢谢劳纳克·古普塔。那很完美。是的,问题解决了。我缺少的 SQL 查询概念是自联接。这个查询很好地解决了实际问题。 @rikuwolf:很高兴它对您有所帮助,如果它回答了您的问题,请不要忘记接受我的回答。见What should I do when someone answers my question?。 啊,是的。第一次得到答案。现在接受了。再次感谢!【参考方案2】:答案来自 Raunak Gupta,感谢 Raunak。这是解决它的代码。
SELECT p.id AS post_id, p.post_title, concat('https://www.ourdomain.com','/wp-content/uploads/',pm2.meta_value) AS URL
FROM `wp_posts` AS p
INNER JOIN `wp_postmeta` AS pm1 ON p.id = pm1.post_id
INNER JOIN `wp_postmeta` AS pm2 ON pm1.meta_value = pm2.post_id
AND pm2.meta_key = '_wp_attached_file'
AND pm1.meta_key = '_thumbnail_id'
ORDER BY p.id DESC
创建此 MySQL 查询所需的关键原则是自联接。
【讨论】:
以上是关于MySQL 查询以获取 post_id 和特征图像 URL的主要内容,如果未能解决你的问题,请参考以下文章
在MySql Godaddy VPS Cpanel中使用sql_mode = only_full_group_by获取MYSQL错误
php [将图像上传到媒体库]将图像上传到媒体库并将其设置为$ post_id(如果已指定)的特色图像。 #wordpress