加入表

时间:2017-01-19 04:26:18

标签: sql wordpress mysqli

我已经通过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外面运行查询,并发生相同的行为。

当插件按距离搜索时,我需要保留此连接。任何人都可以阐明这种奇怪的行为吗?

1 个答案:

答案 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'