2017-07-19 53 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') 

希望这有助于! :)