MySQL查询以获取post_id和要素图像网址

时间:2017-12-04 23:36:23

标签: php mysql wordpress join posts

WordPress将帖子和帖子的精选图片视为两个单独的帖子,这似乎无法创建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似乎已经改变了它的数据库结构,因为这个问题已在这个网站上得到解答。

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

在观看视频,试用和错误,阅读答案的许多小时后,这个查询只让我解决了一半,但是邮政ID或图片网址总是丢失。我无法合并两行以将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中可用的函数。

2 个答案:

答案 0 :(得分: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;

希望这有帮助!

答案 1 :(得分:1)

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