我已经通过geomywp插件的过滤器修改了WordPress中的SQL查询,以便我可以按分类和距离搜索用户。
结束查询如下所示
SELECT SQL_CALC_FOUND_ROWS u.ID as id FROM wp_users u
INNER JOIN wppl_friends_locator gmwlocations ON u.ID = gmwlocations.member_id
INNER JOIN wp_term_relationships ON u.ID = wp_term_relationships.object_id
WHERE wp_term_relationships.term_taxonomy_id = '47'
term_taxonomy_id
会根据他们搜索的类别进行更改。
关于这个真正奇怪的是它只有在有超过1个结果时才有效。如果只有1个结果,则此查询显示0结果。
如果我将连接删除到geolocation表,如下所示:
SELECT SQL_CALC_FOUND_ROWS u.ID as id FROM wp_users u
INNER JOIN wp_term_relationships ON u.ID = wp_term_relationships.object_id
WHERE wp_term_relationships.term_taxonomy_id = '47'
然后它适用于只有一个用户的分类法。
我无法弄清楚为什么加入此表会停止查询单个结果的工作。我以前从未见过这个。我在mysql中直接在wordpress外面运行查询,并发生相同的行为。
当插件按距离搜索时,我需要保留此连接。任何人都可以阐明这种奇怪的行为吗?
答案 0 :(得分:1)
您可以尝试使用LEFT JOIN
将表连接在一起,这样可以防止在没有匹配的情况下过滤掉联接左侧的记录:
SELECT SQL_CALC_FOUND_ROWS u.ID as id
FROM wp_users u
LEFT JOIN wppl_friends_locator gmwlocations
ON u.ID = gmwlocations.member_id
LEFT JOIN wp_term_relationships
ON u.ID = wp_term_relationships.object_id
WHERE wp_term_relationships.term_taxonomy_id = '47'