0

f 比較的単純な AND/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;";

$regionとの両方から値を取得するために必要$countriesです。ただし、そのままでは の値しか返されません$countries。の行を削除すると、ORの値が返されますが$region、両方は返されません。私は間違って何をしていますか?

4

2 に答える 2

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;"; 
于 2010-11-09T15:45:00.530 に答える
0

括弧がないようですね。

A または B および C または Dはあいまいです。 (A または B) および (C または D)を意味することを明確にするために括弧を使用する必要があります

于 2010-11-09T15:48:47.493 に答える