为什么这个查询忽略了过滤器


Why is this query ignoring the filter?

下面的查询工作正确,如果我删除"和表。field='$ filter'或table.field='$otherfilter'"。如果我添加这部分,然后它显示我的结果,我没有授权看到的人。我当然需要添加那部分,这样它就会显示过滤后的结果。我如何构建这个,使它显示我正确的结果使用:和表。field = '$filter'或表。场= ' otherfilter美元'

代码:

  //$filter = "23943409"
    $filter2 = "$username";

  $sql = "SELECT table.field, table2.field, table.field, table.field,
  table.field, table.field, table.field FROM table 
  LEFT JOIN table2 ON table.field = table2.field 
  WHERE table.field='$id' and table.field='$id' 
  and table.field = '$filter' OR table.field='$otherfilter' 
  ORDER BY table.id DESC LIMIT 0, 3";
  $result=mysql_query($sql);
  $query = mysql_query($sql) or die ("Error: ".mysql_error());
  if ($result == "")
  {
  echo "";
  }
  echo "";

  $rows = mysql_num_rows($result);
  if($rows == 0)
  {
  print("");
 }
 elseif($rows > 0)
 {
 while($row = mysql_fetch_array($query))
 {
 $field = $row['field'];
 print("$field");
 }
 }

尝试AND (table.field = '$filter' OR table.field = '$otherfilter')。注意子句周围的括号。我假设您已经混淆了代码,并将实际字段名称替换为"field"。

你必须用圆括号括住你的过滤器:

AND (table.field = '$filter' OR table.field='$otherfilter')

你说"字段是一个苹果字段是一个橘子"与table.field=$id AND table.field = $filter。希望这只是你懒得混淆你的表/字段名,但如果你使用相同的表。

如果这两个值的字段组合,那么您将排除所有记录,因为单个记录字段一次不能包含多个值。

您可能正在处理andor之间的优先级问题。试一试:

"SELECT table.field, table2.field, table.field, table.field,
  table.field, table.field, table.field FROM table 
  LEFT JOIN table2 ON table.field = table2.field 
  WHERE table.field='$id' and table.field='$id' 
  and (table.field = '$filter' OR table.field='$otherfilter')
  ORDER BY table.id DESC LIMIT 0, 3