我有一个添加朋友的应用程序。我需要有我的脚本来检查,如果用户已经是朋友。我以为我能做到。我这样做:
$username = $_GET[user];
$ven_til_id = $_SESSION['userID'];
$num = 1;
if(isset($_GET['add_friend'])){
$check=("SELECT username,ven_til_id, COUNT(*) AS num FROM friends WHERE username=$username AND ven_til_id=$ven_til_id GROUP BY username,ven_til_id")or die(mysql_error());
$result=mysql_query($check);
if(!$result){
echo "Cant run query.";
} else {
$num = mysql_num_rows($result);
}
if($num>0){
header("Location: /profil/$username?add_error");
} else {
$sql=mysql_query("INSERT INTO friends (username,ven_til_id)VALUES('$username', '$ven_til_id')")or die(mysql_error());
header("Location: /profil/$username");
}
}
?>
但是当我添加一个朋友时,它很好。它添加了它,一切都很好。但当我想再加一个的时候,它说我们已经是朋友了。我猜这是因为它在计算我的ID (ven_til_id)在表中列出的次数。
你少了一个逗号:
SELECT
username,ven_til_id COUNT(*) AS num FROM ...
应该SELECT
username,ven_til_id, COUNT(*) AS num FROM ...
此外,您对count字段的引用是不正确的-它应该是第三列或$row[2]
您可能希望通过名称引用字段来使代码更健壮,例如$row['num']
最后要确认的一件事是,使用计数检索的值被视为整数而不是字符串。我不认为是这里的问题所在,但是您可能需要显式地强制转换它以避免以后可能出现的问题,例如…
$num = (int) $row[2];
选项1 只需选择适当的行,看看您返回了多少条记录…
SELECT username,
ven_til_id
FROM friends
WHERE username=$username
AND ven_til_id=$ven_til_id
然后计算使用PHP返回的记录数量-例如mysql_num_rows()
(我认为这是正确的函数名称)
澄清:把
$row = mysql_fetch_row($result);
$num = $row[2];
$num = mysql_num_rows($result);
选项2
让MySQL为你做计数-在这种情况下,你需要告诉它将多个记录分组在一起…
SELECT username,
ven_til_id,
COUNT(*) as Num
FROM friends
WHERE username=$username
AND ven_til_id=$ven_til_id
GROUP BY username,
ven_til_id
然后读取第一行的第三个值(num
),您将得到一个计数
注意:如果你只想要一个1或0