如果请求在mysql里面声明?

时间:2017-07-19 21:25:05

标签: mysql sql

我有一个我的博客条目列表,它们都是英语语言,但有些是西班牙语......为了在西班牙语中正确使用它我使用以下sql语句:

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',但我从两个语言中获取了所有元素。

如果西班牙语中不存在某个元素,那么我该怎么检查那里呢?

1 个答案:

答案 0 :(得分:1)

问题是您正在将OR子句与WHERE子句组合在一起。如果没有括号,OR子句并不专门与AND子句对应,而是在其前面的所有。也就是说,您的初始代码会尝试抓取西班牙语中两者的任何行,并且没有父级, OR 的英语(可能没有父级)

没有括号,这相当于:

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')

希望这有帮助! :)