如何编写MySQL查询统计WordPress中图片的使用频率?
统计WordPress中图片的使用频率(基于wp_posts表)
当然可以通过MySQL查询实现这个需求。WordPress的文章内容存储在wp_posts表的post_content字段中,图片的URL通常包含在<img>标签的src属性里,我们可以通过正则提取这些URL并分组计数。
场景1:统计图片在所有文章中的总出现次数
这个查询会统计每张图片在所有已发布内容里的出现次数(包括同一篇文章内的重复引用):
SELECT TRIM(REGEXP_SUBSTR(post_content, '<img[^>]+src="([^"]+)"', 1, 1, 'i', 1)) AS image_url, COUNT(*) AS total_usage FROM wp_posts WHERE post_type = 'post' -- 可替换为page、custom_post_type等自定义内容类型 AND post_status = 'publish' AND post_content REGEXP '<img[^>]+src="[^"]+"' GROUP BY image_url ORDER BY total_usage DESC;
场景2:统计图片被多少篇不同文章引用
如果需要统计每张图片被多少篇独立文章引用(排除同一篇文章内的重复计数),可以用以下查询:
SELECT TRIM(REGEXP_SUBSTR(post_content, '<img[^>]+src="([^"]+)"', 1, 1, 'i', 1)) AS image_url, COUNT(DISTINCT ID) AS referenced_posts FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' AND post_content REGEXP '<img[^>]+src="[^"]+"' GROUP BY image_url ORDER BY referenced_posts DESC;
关键说明与优化
- 表前缀替换:如果你的WordPress表前缀不是
wp_,请将查询中的wp_posts替换为实际表名(比如wp_blog_posts)。 - 兼容单引号src:如果图片标签使用单引号包裹src(如
<img src='xxx.jpg'>),可以把正则调整为<img[^>]+src=['"]([^'"]+)['"],同时修改REGEXP_SUBSTR的匹配参数。 - 过滤本地图片:如果只需要统计WordPress媒体库的图片,可以在查询末尾添加
HAVING image_url LIKE '%/wp-content/uploads/%'。 - 正则局限性:复杂的HTML结构(如嵌套标签、转义字符)可能导致少数URL提取不准确,若需要更精准的处理,建议结合后端语言解析HTML。
内容的提问来源于stack exchange,提问作者asbl
相关产品推荐
相关产品推荐

