2017-07-19 8 views
1

私は、SQL文の次使用スペインで正しくそれを得るために...彼らはすべて英語であるが、いくつかはスペインにあり、私のブログエントリのリストを持っている:実装することがありmysqlのリクエストがwhere文の場合?

SELECT * 
FROM blog_items 
JOIN blog_items_trans on blog_items.id = blog_items_trans.element_id 
WHERE blog_items.parent_id = 0 
AND blog_items_trans.language = 'es' 

Iの事blog_items_trans.language = 'es'

私が試したのはANDの後に追加します:blog_items_trans.language = 'es' OR blog_items_trans.language = 'en'しかし、私は両方のランゲージのすべての要素を取得します。

要素がスペイン語で存在し、英語で取得できない場合は、どうすれば確認できますか?

+0

なぜ最初にWHERE句を使用するのですか?テーブルにはスペイン語と英語の両方があり、両方の言語(JOIN)が必要なので、language句を削除して、parent_id = 0のすべてのトランザクションを返すことができます。 – Isaiah3015

答えて

1

OR句とWHERE句を組み合わせているという問題があります。角括弧なしの場合、OR句はAND句には具体的に対応せず、の前にはすべてが続きます。つまり、最初のコードでは、のいずれかの行をスペイン語でとし、親はありません。または(親を持たない可能性があります)を取得しようとします。単にあなたのAND文の内側にブラケットを追加し、あなただけの英語またはスペイン語でいずれかある親のない行をつかむことを確認するために

SELECT * 
FROM blog_items 
JOIN blog_items_trans on blog_items.id = blog_items_trans.element_id 
WHERE (blog_items.parent_id = 0 AND blog_items_trans.language) = 'es' 
OR blog_items_trans.language = 'en' 

:括弧なし

、これはと等価になり

SELECT * 
FROM blog_items 
JOIN blog_items_trans on blog_items.id = blog_items_trans.element_id 
WHERE blog_items.parent_id = 0 
AND (blog_items_trans.language = 'es' OR blog_items_trans.language = 'en') 

:)

関連する問題