2017-10-30 9 views
0

私はWordPressのサイトでこのクエリを持っている:このWordPress SQLクエリで何が問題になっていますか?

$の破は、3つの数字(例:4,5,23)の文字列がある
SELECT post.*,postr.* 
FROM `wp_posts` as post 
INNER JOIN wp_term_relationships postr on post.ID=postr.object_id 
WHERE postr.term_taxonomy_id IN(".$implode.") 
AND post_status='publish' 
AND post_type='product' 
GROUP BY ID 

私が抱えている問題は、これらの数値が3つのドロップダウンリストの選択IDから取得されていることですが、一度に1つだけがフィルタリングのために働くようです。たとえば、4,3,21は4,0,0と同じ値を返し、0,5,0は0,5,25と同じ値を返します。私の質問に何が間違っていますか? INはここでは適切ではありませんか?

ご協力いただきありがとうございます。

答えて

1

だけのセクションによってグループにpostr.term_taxonomy_idを追加し、あなたが取得します:

SELECT post.*,postr.* 
FROM `wp_posts` as post 
INNER JOIN wp_term_relationships postr on post.ID=postr.object_id 
WHERE postr.term_taxonomy_id IN(".$implode.") 
AND post_status='publish' 
AND post_type='product' 
GROUP BY ID,postr.term_taxonomy_id 

「postr.term_taxonomy_id」の非集約列であるとすることで、グループであるべきだからです。

+0

申し訳ありませんが、これは動作していないようです。 – user1834616

+1

なぜ機能しないのですか?どのエラーですか?あなたはこれを学ぶためにいくつかのデバッグをする必要があります。たとえば、SQLクエリをコピーし、phpmyadminまたは別のSQLマネージャで直接実行します。 ($ implodeを実数で置き換えれば)偽のエラーがあれば表示されます。私は自分のlocalhostでこのクエリを実行しますが、エラーなしで動作します。 –

+0

こんにちは、あなたのコードが実行されていますが、それは私がそれを必要としていないのです。 IN文の3つの数字のそれぞれは、結果をフィルタリングすることになっています。たとえば、3つの値のそれぞれが結果をさらにフィルタリングしている国の検索クエリ(国、都道府県、市)を考えてみましょう。州が変わるかどうかは今のところ問題ではありません。常に最初の値(国)の結果が表示されます ありがとうございます。 – user1834616

関連する問題