为什么此查询忽略了过滤器?

时间:2011-10-25 20:44:30

标签: php sorting filter

如果我删除“和table.field ='$ filter'或table.field ='$ otherfilter'”,则下面的查询正常工作。如果我添加这部分,它会显示我无权查看的人的结果。我定义需要添加该部分,以便向我显示过滤结果。我如何构建它,以便使用以下方法显示正确的结果:和table.field ='$ filter'或table.field ='$ 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");
 }

 }

4 个答案:

答案 0 :(得分:1)

试试AND (table.field = '$filter' OR table.field = '$otherfilter')。请注意该子句的括号。我假设你已经混淆了代码并用“field”替换了实际的字段名称。

答案 1 :(得分:1)

您必须在过滤器周围放置括号:

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

否则你的逻辑就会关闭。

答案 2 :(得分:1)

你说{field是一个苹果 AND 字段是橙色的“table.field=$id AND table.field = $filter。希望你只是懒得混淆你的表/字段名,但是如果你对这两个值使用相同的table.field组合,那么你要排除所有记录,因为单个记录字段中不能有多个值。一段时间。

答案 3 :(得分:1)

您可能正在处理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