如何在MySQL中使用AND和OR

如何在MySQL中使用AND和OR,mysql,Mysql,我想在我的网站上创建一个搜索。在搜索表单中,我有用于搜索的类别和输入查询。例如,在类别im选择中,jmovies和在输入查询中,ashi的im类型关键字 我的代码 SELECT * FROM master_post WHERE category = 'jmovies' AND master_post_name LIKE '%ashi%' OR altname LIKE '%ashi%' 所以category=jmovies和keyword=ashi 例如,我有这样的桌子

我想在我的网站上创建一个搜索。在搜索表单中,我有用于搜索的类别和输入查询。例如,在类别im选择中,jmovies和在输入查询中,ashi的im类型关键字

我的代码

SELECT * 
FROM master_post 
WHERE category = 'jmovies' 
    AND master_post_name LIKE '%ashi%' 
    OR altname LIKE '%ashi%'
所以category=jmovies和keyword=ashi

例如,我有这样的桌子

category     master_post_name    alt_name
===========  ==================  ===============
JMovies      ashi_include_1      not_include
JMovies      ashi_include_2      not_include
JMovies      ashi_include_3      not_include
JMovies      not_include         ashi_include_1
JMovies      not_include         not_include
Drama        ashi_in_drama       ashi_include_2
category     master_post_name    alt_name
===========  ==================  ===============
JMovies      ashi_include_1      not_include
JMovies      ashi_include_2      not_include
JMovies      ashi_include_3      not_include
JMovies      not_include         ashi_include_1
如果我使用该代码运行,结果是

category     master_post_name    alt_name
===========  ==================  ===============
JMovies      ashi_include_1      not_include
JMovies      ashi_include_2      not_include
JMovies      ashi_include_3      not_include
JMovies      not_include         ashi_include_1
Drama        ashi_in_drama       ashi_include_2
问题是,由于我选择了电影,所以我的结果中不应该有戏剧类,即使戏剧类在《大师邮报》或《另类名字》中有ashi

结果一定是这样

category     master_post_name    alt_name
===========  ==================  ===============
JMovies      ashi_include_1      not_include
JMovies      ashi_include_2      not_include
JMovies      ashi_include_3      not_include
JMovies      not_include         ashi_include_1
JMovies      not_include         not_include
Drama        ashi_in_drama       ashi_include_2
category     master_post_name    alt_name
===========  ==================  ===============
JMovies      ashi_include_1      not_include
JMovies      ashi_include_2      not_include
JMovies      ashi_include_3      not_include
JMovies      not_include         ashi_include_1
即使im choicejmovies和not fill输入关键字结果也不仅显示jmovies,还显示了戏剧


注意:alt\u namemaster\u post\u name具有相同的关键字。

我不是专家,但请用括号括起来:

SELECT * FROM master_post 
WHERE category = 'jmovies' AND (master_post_name LIKE '%ashi%' OR altname LIKE '%ashi%')

查看此答案:

我不确定是否正确理解了您的问题,但您可以尝试以下查询:

SELECT * FROM master_post 
WHERE category = 'jmovies' AND (master_post_name LIKE '%ashi%' OR altname LIKE '%ashi%')

我怀疑这里的“问题”在于AND运算符的优先级高于OR运算符。

这不就是在查询中添加一些括号的情况吗?请参阅括号?我希望你指的是括号@Chris:-)啊,我明白了,我知道必须用“(“and”)”但我不知道怎么用它,也不知道它叫什么名字,所以这就是括号。