Почему этот запрос игнорирует фильтр? - PullRequest
0 голосов
/ 26 октября 2011

Запрос ниже работает правильно, если я УДАЛЮ "and table.field = '$ filter' ИЛИ ​​table.field = '$ otherfilter'".Если я добавлю эту часть, то она покажет мне результаты для людей, которых я не уполномочен видеть.Я определенно должен добавить эту часть, чтобы она показывала мне отфильтрованные результаты.Как мне структурировать это так, чтобы он показывал мне правильные результаты, используя: and 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 ]

1 голос
/ 26 октября 2011

Вы, вероятно, имеете дело с проблемами приоритета между and и or.Попробуйте:

"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
1 голос
/ 26 октября 2011

Вы должны поместить круглые скобки вокруг ваших фильтров:

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

В противном случае ваша логика отключена.

1 голос
/ 26 октября 2011

Вы говорите "поле - это яблоко И поле - это оранжевое" с table.field=$id AND table.field = $filter. Надеюсь, что вам просто лень запутывать имена таблиц / полей, но если вы используете одну и ту же комбинацию table.field для этих двух значений, то вы исключаете ВСЕ записи, поскольку в одном поле записи не может быть больше одного значения в время.

1 голос
/ 26 октября 2011

Попробуйте AND (table.field = '$filter' OR table.field = '$otherfilter').Обратите внимание на круглые скобки вокруг предложения.Я предполагаю, что вы запутали код и заменили фактические имена полей на «field».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...