1

在我的表“用户”中有“朋友”,

像这样 :

+----+------+---------+
| id | name | friends |
+----+------+---------+
|  1 | a    | 0,1,2   |
|  2 | b    | 0,1,3   |
|  3 | c    | 0,1     |
+----+------+---------+

如何使用explode函数逐一(不是0,1,2)获取以逗号(,)分隔的朋友ID;

如何选择身份证?(例子) :

$sql = Select id from users where id = (exploded)

if (mysql_num_rows($sql) > 0 ) {
  $TPL->addbutton('Unfriend');
}else{
  $TPL->addbutton('Add as Friend')
}
4

4 回答 4

5

这里的解决方案实际上是对你的数据库结构稍作改动。我建议您创建一个“多对多”关系表,其中包含用户引用的所有用户朋友。

+---------+-----------+
| user_id | firend_id |
+---------+-----------+
|       1 |         2 |
|       1 |         3 |
|       1 |         4 |
|       2 |         1 |
|       2 |         5 |
+---------+-----------+

如果您在一个字段中存储值列表,那么这是您的数据库设计不是很优化的第一个迹象。如果您需要搜索数值,最好在该字段上放置索引以提高效率并使数据库为您工作,而不是相反:)

然后要查明用户是否是某人的朋友,您将查询此表 -

SELECT * FROM users_friends WHERE 
  `user_id` = CURRENT_USER AND `friend_id` = OTHER_USER

要获得某个用户的所有朋友,您可以这样做 -

SELECT * FROM users_friends WHERE `user_id` = CURRENT_USER
于 2013-01-22T10:23:47.443 回答
0

只是一个简单的例子,可以让你清楚如何进行:

// Obtain an array of single values from data like "1,2,3"...
$friends = explode(',', $row['friends']);

然后,回到您的查询中:

// Obtain back data like "1,2,3" from an array of single values...
$frieldslist = implode(',', $friends);
$sql = "SELECT * FROM users WHERE id IN ('" . $frieldslist . "')";
于 2013-01-22T10:19:18.903 回答
0

从你的字符串中获取一个 if ids 的数组explode将像这样使用

$my_array = explode("," , $friends);

但你可能会更好地使用 mysqlIN子句

$sql = "Select id from users where id in (".$row['friends'].")";
于 2013-01-22T10:20:20.953 回答
0

只是一个快速的想法。更改数据库的表。可以肯定的是,过一段时间会出现很多问题。

你可以有这样的东西。

    id      hasfriend
    1          2
    1          3
    2          1 no need to be here (You have this already) 
    2          4 
       .....

您可以通过使用索引来实现唯一性或编程来做到这一点。你可能会想到更好的东西。将您解决问题的方法改为这样。

于 2013-01-22T10:34:32.467 回答