在我的网站上,我正在尝试编写一个功能,类似于Facebook和twitters时间线,用户可以“关注”其他用户,并接收他们的“广播”。数据库表是:
**members**
--------
id
fullname
following
**broadcasts**
-----------
id
mem_id
broadcast (the content)
broadcast_date
成员表中的“follow”是存储用户ID的varchar文本。因此,如果我关注用户4 5和6(4,5,6,)将出现在以下列中。我的问题是,我从数据库中查询的是,它只检索我关注的第一个用户的“广播”而没有其他用户。
$sql_broadcasts = mysql_query("
SELECT *
FROM members
JOIN broadcast
ON(broadcast.mem_id = members.following)
WHERE members.id=$id
ORDER BY broadcast_date DESC
LIMIT 10;
");
其中$ id是$ _SESSION ['id']。我一直在盯着这段代码,有人能发现我做错了吗?提前谢谢
答案 0 :(得分:3)
加入不会这样。
假设broadcast.mem_id是数字类型,数据库将默默地转换成员.follower_array;这将从4,5,6中获得4,所以一条记录匹配。
你需要一个m:n关系来实现这一点,一个表有成员(你已经拥有);和另一个包含关注者的表,为每个关注者插入一条记录,其中包含正在成员的成员ID和正在关注的成员的成员ID。这样一个成员可以拥有0-n粉丝。
Table member
id
Table follower
member_id
member_id_follower
然后你可以做类似
的事情SELECT
...
FROM
member AS mb
JOIN
follower AS fl ON fl.member_id = mb.id
WHERE
mb.id = 123
答案 1 :(得分:0)
首先,您必须在子查询中获取所有以下ID并将其传递给父查询!
$sql_broadcasts = mysql_query("SELECT *
FROM broadcast where mem_id IN( Select following from members where id = $id)
ORDER BY broadcast_date DESC
LIMIT 10;
");
其中以下字段包含以下所有ID:逗号分割,例如4,5,6