我正在尝试进行查询以获取帖子的帖子标题,链接和图片。我有以下查询所需的内容:
SELECT WPPOSTS.post_title,WPPOSTS.guid,WPPOSTS_2.image
FROM wp_posts WPPOSTS
LEFT JOIN
(
SELECT guid AS image,post_parent
FROM wp_posts
WHERE post_type = 'attachment'
ORDER BY post_date_gmt DESC
) WPPOSTS_2 ON (WPPOSTS_2.post_parent = WPPOSTS.ID)
WHERE WPPOSTS.ID IN (2439,2395,2355)
现在,我真正想要的只是在帖子中插入最后一个缩略图,而不是所有缩略图。这就是为什么我已经考虑了order by子句的原因。我试过在LEFT JOIN SELECT中设置一个“LIMIT 1”,但我猜这是错的。
有什么想法吗?感谢
答案 0 :(得分:4)
我发布我的解决方案,因为这也可以帮助其他人。因为上面的代码工作但也打印了max(c.guid)的NULL元素,我过滤这些结果。除此之外,如果返回的关联数组获得了很好的名称,则更容易获得结果:
SELECT a.post_title title, max(c.guid) img_url, a.ID id
FROM wp_posts a
LEFT JOIN
(select post_parent, max(post_date_gmt) as latest_image_date from wp_posts
where post_type='attachment' GROUP BY post_parent) b
on a.id=b.post_parent
LEFT JOIN wp_posts c
on c.post_parent=a.id
and c.post_type='attachment'
and b.latest_image_date = c.post_date_gmt where c.guid IS NOT NULL
GROUP BY a.post_title ORDER BY a.ID
mysql_fetch_array()可能如下所示:
title img_url id
Despre http://localhost/drumliber/wp-content/uploads/2009... 2
Brandul de tara al Romaniei - imnul turistic http://localhost/drumliber/wp-content/uploads/2009... 9
答案 1 :(得分:1)
您不希望在嵌套选择上放置LIMIT,因为它只会找到1行 - 而不是像您想要的那样为每个帖子找到一行。
您可以使用嵌套选择来查找每个帖子的MAX(post_date_gmt)(我想您想要GROUP BY post_parent?)然后选择匹配最高发布日期的图片的guid。
尝试类似下面的内容(我没有对此进行过测试,因此请加入一些盐):
SELECT a.post_title,max(c.guid)
FROM wp_posts a
LEFT JOIN
(select post_parent, max(post_date_gmt) as latest_image_date from wp_posts
where post_type='attachment' GROUP BY post_parent) b
on a.id=b.post_parent
LEFT JOIN wp_posts c
on c.post_parent=a.id
and c.post_type='attachment'
and b.latest_image_date = c.post_date_gmt
GROUP BY a.post_title
每个帖子的guid最终选择MAX只是为了保证在不太可能的情况下,在一个帖子上有多个图像具有完全相同的时间戳的唯一性。