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中可用的函数。
答案 0 :(得分: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;
希望这有帮助!
答案 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查询所需的关键原则是自联接。