【发布时间】:2011-11-30 02:41:15
【问题描述】:
我正在为我的网站设计一个“朋友”系统。我的数据库中有一个 USERS 表,该表中有两个字段,分别称为“friendrequestssent”和“friendrequestsreceived”。
当一个用户向另一个用户发送好友请求时,它会将他的 USERID 存储到对方的“friendrequestsreceived”字段中,并将对方的 USERID 存储到他的“friendrequestssent”字段中,两者都以逗号结尾(即:12345,) .
我需要检查请求是否已经存在以防止重复请求,到目前为止我已经尝试过:
$sql = "SELECT * FROM users WHERE userid = $userid AND $profileid IN (friendrequestssent);";
$sent = mysql_num_rows(mysql_query($sql));
$sql = "SELECT * FROM users WHERE userid = $profileid AND $userid IN (friendrequestsreceived);";
$received = mysql_num_rows(mysql_query($sql));
if(($sent > 0) && ($received > 0)) {
//do stuff here
}
起初这很好用,但是当字段中存在多个逗号分隔值时(即:12345,12346,),IN 语句不再找到该值并且行数保持为零。
据我所知,我不明白为什么 MySQL 查询中的 IN 语句看不到值。
另一方面,我确信无论如何都有更好的方法来做到这一点。我只是不确定如何。请指教。
【问题讨论】:
-
数据库中的 CSV 是邪恶的,它会让你直接下地狱。
-
IN() 类型不是特定的吗?即,您不会混合整数和字符串,而是有效地将整数(用户 ID)传递给字符串(csv) - 只需一个条目就可以了,如果没有逗号,它可能能够评估整数字符串。我不是 100% 确定的,因为我从不在数据库中使用 CSV - 他们只是对我尖叫“这应该是一个链接表”......
标签: php mysql database select csv