PHP使用爆炸和一个包含多个值的字符串链接两个表


php linking two tables using explode and one string containing multiple values

这是我的第一个问题,希望你能理解。

当一个包含多个值的字符串时,我如何使用php/mysql链接两个表。

基本上,一个表是myMembers表,包含一个"friend_array",其中多个ID存储在一个字符串中。

另一个表包含所有我的网站用户的帖子(tweets)的列表。

我如何链接这两个表以显示所有用户的好友帖子的最新帖子?

id, friend_array,
1,  1,2
2,  2,5,7
.
.

//post table

id, mem_id, post,     post_date
1,  5,      PHP ole,  2011-08-11 11:30
2,  2,      AJAX ole, 2011-08-12 13:10

希望这是有意义的。提前感谢大家

如果可能的话,我会重新构建表,使您得到如下结构:

文章

id, mem_id, post,     post_date
1,  5,      PHP ole,  2011-08-11 11:30
2,  2,      AJAX ole, 2011-08-12 13:10

其中id为主键

mymembers

id, name
1,  member1
2,  member2

其中id为主键

memberconnections

id, mem_id, friendid
1, 1, 1
2, 1, 2
3, 2, 2
4, 2, 5
5, 2, 7

其中id为主键,friend为外键

这样你可以很容易地创建一个查询来获得你想要的信息。

使用查询来代替PHP的东西是更快更好的方法。

如果您想保留您的数据库结构,您可以使用FIND_IN_SET()和子查询。这不会像在真正的IN子句中那样拆分CSV值,但具有相同的效果:

SELECT *
  FROM posts
 WHERE FIND_IN_SET(mem_id,
           (SELECT friend_array FROM myMember WHERE id=2)
       )

如果我没理解错的话

mysql_query("SELECT * FROM POSTS WHERE mem_id IN( SELECT friend_array FROM myMember WHERE id=" . $id);

其中$id是您希望为其找到好友的当前成员的id

使用PHP很容易做到这一点。你甚至不需要爆发。这取决于你怎么做;它的基本内容是:

    $q = mysqli_query("SELECT * FROM myMember WHERE id = " . $id);
    while($info = mysqli_fetch_array($q)) {
     $p = mysqli_query("SELECT * FROM posts WHERE mem_id IN(".$info['friendArray'].") ORDER BY post_date DESC");
    while($pinfo = mysqli_fetch_array($p) {
echo $pinfo['post_title']; // etc...
}
    }

如果你有数百个帖子,你不想在循环内做查询,在这种情况下,我发现抓取相关信息并将其存储在2个单独的数组中,然后运行foreach循环以降低强度。

规范化你的数据库也将不那么密集…