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_idpost_id 好问题@aaron。 wp_posts 表确实包含与 WordPress 页面相关的所有图像,但据我所知,wp_posts 表无法识别帖子的特色图像(主图像)。它列出了所有相关的图像(它也认为是帖子),无论图像是否嵌入到正文中,或者它是否是主要的“特色”图像。我想你的第二个问题是你的手指。请参阅下面我对 raunak-gupta 的回复。 我没有看到你的回复。 【参考方案1】:

你正在尝试根据post_idmeta_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错误

获取数组查询mysql、php的最大值

SQl查询以获取类似于图像的输出[关闭]

php [将图像上传到媒体库]将图像上传到媒体库并将其设置为$ post_id(如果已指定)的特色图像。 #wordpress

MYSQL:查询以获取上一个和下一个视频ID?

MySQL 查询以根据自定义列名和值获取值