2013-03-22 9 views
1

Я написал приложение, которое содержит таблицу пользователей MySQL. Следующий код находит пользователей из таблицы с рейтингом прохлады в пределах 20% от текущей оценки прохлады текущего пользователя.Игнорировать одну определенную строку из вывода MySQL

$query = "SELECT USERNAME FROM USERS WHERE RATING BETWEEN ".$coolnessRating." * 0.8 AND ".$coolnessRating." * 1.2"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) { 

    echo $row['USERNAME']; 
} 

Моя проблема заключается в следующем: если у меня есть пользователь и их рейтинг прохлада является 20, например, они сами возвращаются в наборе результатов, как, очевидно, их собственный рейтинг находится в пределах 20% от их рейтинга, если это имеет смысл ,

Есть ли способ игнорировать эту конкретную строку, но распечатать остальную часть набора результатов?

ответ

2

«Если у меня есть пользователь» означает, что у вас есть свое имя пользователя или идентификатор, верно? Добавьте условие в ваше предложение where с AND.

+2

О, и очевидно, что вы уязвимы для SQL инъекций/Little Bobby Tables, но я предполагаю, что это учебное упражнение. –

+0

Да, это для моего последнего университетского проекта. Я все равно пойду позже и уберу переменные PHP. – Tiffany

+1

@Tiffany. Если вам нужно избежать ввода SQL, то вы уже делаете это неправильно. Посмотрите на [PDO] (http://php.net/manual/en/book.pdo.php) и [подготовленные заявления] (http://www.php.net/manual/en/pdo.prepared-statements. PHP). –

1

Вы просто хотите, чтобы добавить не равен ваш WHERE критерии: «Использовать PDO Вашего код уязвим!»

SELECT USERNAME 
FROM USERS 
WHERE RATING <> ".$coolnessRating." 
    AND RATING BETWEEN ".$coolnessRating." * 0.8 AND ".$coolnessRating." * 1.2" 
1

Отказавшись обычного злоключениях, вы должны включить другую и не «этот пользователь» Состояние

$query = "SELECT USERNAME FROM USERS WHERE RATING BETWEEN ".$coolnessRating." * 0.8 AND ".$coolnessRating." * 1.2 AND USERNAME != ".$user.""; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) { 

    echo $row['USERNAME']; 
} 
0

Почему не имея ваше состояние < 20% я не могу сказать, хотя, потому что вы не упомянули ожидаемые значения, принятых

1

Просто фильтра это с другой стороны к вашему ИНЕКЕ:

SELECT USERNAME 
FROM USERS 
WHERE RATING BETWEEN $coolnessRating * 0.8 AND $coolnessRating * 1.2 
AND USER_ID != $current_user_id 

(Очевидно, что последняя строка зависит от того, что имя столбца и как вы храните текущий идентификатор пользователя)

1

Сначала вам нужно получить информацию от текущего пользователя, например, их идентификатора или имени пользователя.

Затем вы можете сделать

$query = "SELECT USERNAME FROM USERS WHERE RATING BETWEEN ".$coolnessRating." * 0.8 AND ".$coolnessRating." * 1.2 AND id != " . $id; 

или

$query = "SELECT USERNAME FROM USERS WHERE RATING BETWEEN ".$coolnessRating." * 0.8 AND ".$coolnessRating." * 1.2 AND id != " . $username; 

где $ имя пользователя и $ ID являются идентификатор и имя пользователя текущего пользователя

Смежные вопросы