在php中爆炸

时间:2013-01-22 10:15:12

标签: php mysql explode

在我的表格'用户'有朋友' ,

像这样:

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

如何使用explode函数逐个获取由逗号(,)分隔的朋友ID(不是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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 . "')";

答案 2 :(得分:0)

从字符串explode获取if id数组将像这样使用

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

但你最好使用mysql IN子句

$sql = "Select id from users where id in (".$row['friends'].")";

答案 3 :(得分:0)

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

你可以有这样的东西。

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

您可以使用索引实现唯一性或编程。你可能会想到更好的东西。将问题的处理方法改为这样的方法。