Exploding in php

落爺英雄遲暮 提交于 2019-12-24 13:37:26

问题


In my table 'users' there are 'friends' ,

Like this :

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

How do I use the explode function to get the friends id one by one (not 0,1,2) that are separated by a comma (,) ;

How do I select the id? (Example) :

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

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

回答1:


The solution here is actually a slight change in your database structure. I recommend you create a "many-to-many" relational table containing all of the users friends referenced by user.

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

If you are storing lists of values within one field then that is the first sign that your database design is not quite optimal. If you need to search for a numerical value, it'll always be better to place an index on that field to increase efficiency and make the database work for you and not the other way around :)

Then to find out if a user is a friend of someone, you'll query this table -

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

To get all the friends of a certain user you would do this -

SELECT * FROM users_friends WHERE `user_id` = CURRENT_USER



回答2:


Just a simple example that will make you clear how to proceed:

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

Then, back in your query:

// Obtain back data like "1,2,3" from an array of single values...
$frieldslist = implode(',', $friends);
$sql = "SELECT * FROM users WHERE id IN ('" . $frieldslist . "')";



回答3:


to get an array of if ids from your string explode would be used like this

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

but you'd probably be better using the mysql IN clause

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



回答4:


Just a quick idea. Change your database's table. It is certain that after a while many problems will arise.

You could have something like this.

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

You can do this by using indexes for uniqueness or programming. You may think of something better. Change your approach to the problem to something like this.



来源:https://stackoverflow.com/questions/14456132/exploding-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!