2017-07-19 57 views
1

我有我的博客條目列表,它們都在英語,但有些是在西班牙...正確地得到它在西班牙我用下面的SQL語句:如果在mysql中請求聲明?

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' 

我的事情出現了,是落實blog_items_trans.language = 'es'

我試過的是在AND之後加上:blog_items_trans.language = 'es' OR blog_items_trans.language = 'en'但是所以我從這兩個語言中得到了所有的元素。

如何在西班牙不存在元素的情況下如何檢查?

+0

爲什麼首先使用語言的WHERE子句?該表既有西班牙語也有英語,既然你想要兩種語言(JOIN),你可以放棄語言條款,只需返回parent_id = 0的所有交易。我錯過了什麼? – Isaiah3015

回答

1

問題是,您正在將OR子句與WHERE子句相結合。沒有括號,OR子句不具體對應於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' 

要確保你只抓住沒有父母是要麼英語或西班牙語,只需添加您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') 

希望這有助於! :)