SQL实现:当_wp_attachment_image_alt无值时跳过整条附件记录
WordPress附件查询:仅保留含有效_wp_attachment_image_alt的记录
你的原SQL问题在于用LEFT JOIN配合meta_key NOT LIKE '_wp_attachment_image_alt',只会过滤掉该元数据行,但依然会保留没有这个元数据的附件记录,甚至会保留附件的其他元数据行,完全没达到“跳过整条附件”的目的。
要实现需求,核心是只保留存在_wp_attachment_image_alt元数据且该元数据值不为空的附件,以下两种写法都可以:
写法一:关联查询同时获取alt文本
如果需要同时拿到附件的基础信息和alt文本值,用INNER JOIN确保只有匹配有效元数据的附件才被选中:
SELECT a.id, a.post_title, a.guid, b.meta_value AS attachment_alt FROM posts a INNER JOIN postmeta b ON a.id = b.post_id WHERE a.post_type = 'attachment' AND b.meta_key = '_wp_attachment_image_alt' AND b.meta_value != '' LIMIT 20
写法二:子查询筛选有效附件ID
如果只需要附件的基础信息,不需要alt文本值,用子查询先筛选出符合条件的附件ID,再查主表更高效:
SELECT id, post_title, guid FROM posts WHERE post_type = 'attachment' AND id IN ( SELECT post_id FROM postmeta WHERE meta_key = '_wp_attachment_image_alt' AND meta_value != '' ) LIMIT 20
两种写法都会直接排除掉没有_wp_attachment_image_alt元数据,或者该元数据值为空的整条附件记录。
内容的提问来源于stack exchange,提问作者simon
相关产品推荐
相关产品推荐

