2013-03-22 40 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

「如果我有用戶」意味着你有他們的用戶名或ID,對吧?將條件添加到AND的where子句中。

+2

哦,並明確你容易受到SQL注入/小鮑比表,但我認爲這是一個學習練習。 – 2013-03-22 01:57:39

+0

是的,這是我最後一年的大學項目。無論如何,我將要經歷並逃避PHP變量 – Tiffany 2013-03-22 01:59:10

+1

@Tiffany如果你需要逃避SQL輸入,那麼你已經做錯了。看看[PDO](http://php.net/manual/en/book.pdo.php)和[預備報表](http://www.php.net/manual/en/pdo.prepared-statements。 PHP)。 – 2013-03-22 14:50:41

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

只是過濾器它與另一部分以您的WHERE子句:

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

(顯然最後一行取決於列名是什麼,你是如何存儲當前用戶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; 

其中$ username和$ ID是當前用戶的ID和用戶名