1

我编写了一个包含用户 MySQL 表的应用程序。以下代码从表中查找酷度等级在当前用户酷度等级的 20% 以内的用户。

$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% 以内。

有没有办法忽略这个特定的行但打印出结果集的其余部分?

4

6 回答 6

2

“如果我有用户”意味着您有他们的用户名或 ID,对吗?使用AND将条件添加到 where 子句。

于 2013-03-22T01:54:44.867 回答
1

您是否只想添加不等于您的 WHERE 标准:

SELECT USERNAME 
FROM USERS 
WHERE RATING <> ".$coolnessRating." 
    AND RATING BETWEEN ".$coolnessRating." * 0.8 AND ".$coolnessRating." * 1.2"
于 2013-03-22T01:54:51.210 回答
1

放弃通常的“使用 PDO!您的代码易受攻击!” spiel,您将包含另一个 AND“不是此用户”条件

$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'];
}
于 2013-03-22T01:55:34.220 回答
1

只需将其与 WHERE 子句的另一部分一起过滤掉:

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

(显然最后一行取决于列名是什么以及您如何存储当前用户 ID)

于 2013-03-22T01:56:13.590 回答
1

首先,您需要从当前用户那里获取信息,例如他们的 id 或用户名。

然后你可以做

$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 和用户名

于 2013-03-22T01:58:21.663 回答
0

为什么不让你的条件 < 20% 我不知道,因为你没有提到预期的传递值

于 2013-03-22T01:55:51.037 回答