MySQL 查询以获取 post_id 和特征图像 URL

MySQL query to get post_id and feature image URL

WordPress 将 post 和 post 的特色图片视为两个独立的 post,这似乎无法创建 SELECT 查询将 post 和 post 的图像 URL 放入同一行,如下所示:

post_id  imageURL
100      [URL]

如何合并 MySQL table 中没有具有共同值的列的两行?一列中的值与另一列中的值关联。

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 似乎已经更改了它的数据库结构,因为这个问题在这个网站上得到了回答。

我试图理解 MySQL 中的原理,当“Group by”不可用时,从一行中获取值并将其显示在另一行中。

观看视频、反复试验、阅读此处的答案几个小时后,这个查询只让我解决了一半,但 Post ID 或图像 URL 是总是失踪。我无法合并两行以将 Post 与其图像 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 中可用的功能。

您正在尝试根据 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;

希望对您有所帮助!

答案来自 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 查询所需的关键原则是自连接。