2010-11-09 85 views
0

fI似乎是一个相对简单的AND/OR子句,它让我头疼。使用AND/OR逻辑运算符的SQL查询

$query = "SELECT stv.name,stc.tmplvarid,stc.contentid,stv.type,stv.display,stv.display_params,stc.value"; 
$query .= " FROM ".$tb1." stc LEFT JOIN ".$tb2." stv ON stv.id=stc.tmplvarid "; 
$query .= " LEFT JOIN $tb_content tb_content ON stc.contentid=tb_content.id "; 
$query .= " WHERE stv.name='".$region."' AND stc.contentid IN (".implode($cIDs,",").") "; 
$query .= " OR stv.name='".$countries."' AND stc.contentid IN (".implode($cIDs,",").") "; 
$query .= " AND tb_content.pub_date >= '$pub_date' "; 
$query .= " AND tb_content.published = 1 "; 
$query .= " ORDER BY stc.contentid ASC;"; 

我需要从两个$region$countries检索值。但是,它只是返回值$countries。如果我删除OR的行,它将返回值$region,但它不会同时返回。我做错了什么?

回答

2

尝试把括号条款的OR的两侧。见下:

$query = "SELECT stv.name,stc.tmplvarid,stc.contentid,stv.type,stv.display,stv.display_params,stc.value"; 
$query .= " FROM ".$tb1." stc LEFT JOIN ".$tb2." stv ON stv.id=stc.tmplvarid "; 
$query .= " LEFT JOIN $tb_content tb_content ON stc.contentid=tb_content.id "; 
$query .= " WHERE (stv.name='".$region."' AND stc.contentid IN (".implode($cIDs,",").")) "; 
$query .= " OR (stv.name='".$countries."' AND stc.contentid IN (".implode($cIDs,",").")) "; 
$query .= " AND tb_content.pub_date >= '$pub_date' "; 
$query .= " AND tb_content.published = 1 "; 
$query .= " ORDER BY stc.contentid ASC;"; 
+0

谢谢,但它仍然只是返回$国家。如果有帮助,以下是完整的功能:http://pastebin.com/E4CdnQNj – Vecta 2010-11-09 15:51:51

0

看起来你缺少括号,不是吗?

A或B和C或d是模糊的,你需要使用括号要清楚你的意思(A或B)和(C或d)