2017-01-09 8 views
0

次のクエリでpostsテーブルから結果を取得したいとします。私は、文のどこの部分が合格しているのかを選択したいと思う。用語のタイプがカテゴリで、CategoryTestにクエリでグループ化された場所で結果を取得するには

ある用語のタイプがタグで、TagTest

WHERE IN条件でWHERE

現在、一つの要素が含まれているが、より多くの可能性があります。 両方ともWHEREは、他方が提示されない場合に結果を与える。 それぞれが単独で、またはORと一緒に働くので、動作します。それはID 33で同じポストを返すので、WHEREグループは正しく設定されていないと思います。

SELECT `posts`.* 
FROM `posts` 
LEFT JOIN `post_term` ON `posts`.`id` = `post_term`.`post_id` 
LEFT JOIN `terms` ON `terms`.`id`= `post_term`.`term_id` 
LEFT JOIN `meta` ON `meta`.`post_id` = `posts`.`id` 
WHERE (
    `terms`.`type` = 'category' 
    AND `terms`.`name` IN('CategoryTest') 
) 
AND (
     `terms`.`type` = 'tag' 
     AND `terms`.`name` IN('TagTest') 
) 

表の定義: 規約テーブル +----+--------------+--------------+----------+ | id | name | slug | type | +----+--------------+--------------+----------+ | 31 | CategoryTest | CategoryTest | category | | 32 | TagTest | TagTest | tag | +----+--------------+--------------+----------+

投稿表: +----+-------+---------+---------+-----------+------------+------------+ | id | title | content | user_id | parent_id | created_at | updated_at | +----+-------+---------+---------+-----------+------------+------------+ | 33 | HEllo | | 0 | 0 | NULL | NULL | +----+-------+---------+---------+-----------+------------+------------+

post_term +----+---------+---------+ | id | post_id | term_id | +----+---------+---------+ | 73 | 33 | 31 | | 74 | 33 | 32 | +----+---------+---------+

+0

「OR」と表示されます。なぜそれを使用しないのですか? –

+0

用語テーブルの定義を表示できますか?より良いサンプルデータがありますか – Mihai

+0

どちらか一方の条件だけでなく両方の条件が合致する結果を取得したいと考えています。 – Iamzozo

答えて

1

existsで簡単に確認できます。

+0

働く、ありがとう! – Iamzozo

+0

ようこそ、私はちょうどあなたの最後のコメントの前に希望されたものを得ていない。 –

+0

複数の 'name'チェックの場合、' ...とt.name IN( 'tag1'、 'tag2') 'は正しいですか? – Iamzozo

関連する問題