在同一查询中组合MySQL AND和OR语句

时间:2012-11-16 14:17:25

标签: mysql sql

这是我目前正在运行的查询:

$result = R::getAll("SELECT * FROM vw_participantes_curso JOIN vw_cursos ON vw_participantes_curso.id = vw_cursos.id_curso where LEFT(vw_cursos.sigla, 3) = 'ICV' AND RIGHT(vw_cursos.sigla, 3) = '312' AND username = :u", 
    array(':u' => $username)
);

用简单的英语查询:

  

找到一名学生,该课程以“ICV”开头并以“312”结尾。

现在我需要在同一个查询中添加一个或语句,使其显示为:

  

找到一名学生,该课程以“ICV”开头,以“312”结尾(角色5 roleid 15)。

如何在MySQL中格式化这样的嵌套条件?

2 个答案:

答案 0 :(得分:1)

您可以使用in运算符:

SELECT * 
FROM vw_participantes_curso 
JOIN vw_cursos 
ON vw_participantes_curso.id = vw_cursos.id_curso 
where LEFT(vw_cursos.sigla, 3) = 'ICV' 
AND RIGHT(vw_cursos.sigla, 3) = '312' 
AND username = :u
AND roleid in (5,15)

或者如果你真的想要or运营商:

SELECT * 
FROM vw_participantes_curso 
JOIN vw_cursos 
ON vw_participantes_curso.id = vw_cursos.id_curso 
where LEFT(vw_cursos.sigla, 3) = 'ICV' 
AND RIGHT(vw_cursos.sigla, 3) = '312' 
AND username = :u
AND (roleid = 5 or roleid = 15)

答案 1 :(得分:0)

最简单的将是

SELECT *
FROM tableName
WHERE columnName LIKE 'ICV%312' AND
      roleID IN (5,15)