WordPress多表关联查询:获取文章浏览量与对应手机号
正确的WordPress文章浏览量+手机号统计SQL语句
你的原查询存在两个关键问题:
- 表名不一致:混用了
wp_posts和wp_640837_posts,需要统一成实际使用的前缀(比如你的案例里是wp_640837_) - 仅关联一次
wp_postmeta无法同时获取postviews_total(浏览量)和listing_tel(手机号)这两个不同的元数据字段,因为它们是wp_postmeta中两条独立的记录
下面提供两种可行的解决方案:
方案1:两次关联wp_postmeta表
通过分别关联wp_postmeta来获取浏览量和手机号,逻辑直观:
SELECT p.post_title AS '文章标题', '浏览量' AS '字段名', pv.meta_value AS '浏览量', tel.meta_value AS '手机号' FROM wp_640837_posts p LEFT JOIN wp_640837_postmeta pv ON p.ID = pv.post_id AND pv.meta_key = 'postviews_total' LEFT JOIN wp_640837_postmeta tel ON p.ID = tel.post_id AND tel.meta_key = 'listing_tel' -- 可选:过滤掉没有浏览量或手机号的文章 WHERE pv.meta_value IS NOT NULL OR tel.meta_value IS NOT NULL ORDER BY CAST(pv.meta_value AS UNSIGNED) DESC;
方案2:使用条件聚合查询
通过聚合函数一次性从wp_postmeta中提取两个字段,适合需要更灵活扩展的场景:
SELECT p.post_title AS '文章标题', '浏览量' AS '字段名', MAX(CASE WHEN pm.meta_key = 'postviews_total' THEN pm.meta_value END) AS '浏览量', MAX(CASE WHEN pm.meta_key = 'listing_tel' THEN pm.meta_value END) AS '手机号' FROM wp_640837_posts p LEFT JOIN wp_640837_postmeta pm ON p.ID = pm.post_id WHERE pm.meta_key IN ('postviews_total', 'listing_tel') GROUP BY p.ID, p.post_title ORDER BY CAST(MAX(CASE WHEN pm.meta_key = 'postviews_total' THEN pm.meta_value END) AS UNSIGNED) DESC;
注意事项
- 确保替换所有表前缀为你实际使用的前缀(比如你的案例里是
wp_640837_) - 浏览量字段是字符串类型,排序时需要用
CAST转换为数值类型 - 使用
LEFT JOIN可以保留那些没有浏览量或手机号的文章,若只需要同时有两个字段的文章,可替换为INNER JOIN
内容的提问来源于stack exchange,提问作者Moerip
相关产品推荐
相关产品推荐

