wordpress mysql查询后缩略图

时间:2010-06-27 10:28:49

标签: mysql wordpress

我正在尝试进行查询以获取帖子的帖子标题,链接和图片。我有以下查询所需的内容:

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”,但我猜这是错的。

有什么想法吗?感谢

2 个答案:

答案 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只是为了保证在不太可能的情况下,在一个帖子上有多个图像具有完全相同的时间戳的唯一性。