2017-01-19 2 views
1

WordPressでgeomywpプラグインのフィルタを使用して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の結果を示します。

私はそうのような地理的位置テーブルに参加削除する場合:

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つの結果がありますか? –

+0

wp_term_relationshipsテーブルには、一致するterm_taxonomy_idを持つエントリがあることがわかります。 wppl_friends_locatorテーブルへの内部結合を削除すると、単一の結果が戻ってきます。私は結合の仕組みを誤解していますか? – Guerrilla

+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' 
+0

ありがとうございます。これは、SQLで直接実行するときに動作しますが、プラグインはまだ結果を返さないので、別の問題もあります – Guerrilla

関連する問題