这是我的第一个问题,希望你能理解。
当一个包含多个值的字符串时,我如何使用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循环以降低强度。
规范化你的数据库也将不那么密集…