我有一个添加朋友的应用程序。如果用户已经是朋友,我需要检查我的脚本。我以为我可以通过COUNT来做到这一点。我确实喜欢这个:
$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)在表格中列出的次数。
答案 0 :(得分:2)
你错过了一个逗号:
SELECT
username,ven_til_id COUNT(*) AS num FROM ...
应该是
SELECT
username,ven_til_id, COUNT(*) AS num FROM ...
此外,您对计数字段的引用不正确 - 它应该是第三列或$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为你做计数 - 在qhich情况下,你需要告诉它将多个记录组合在一起......
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
然后只读第一行的第3个值(num
),你就会有一个计数
注意:如果您只是期待1或0
,第二种方法可能会过度杀伤