MySQL Query JOINS没有完全检索

时间:2011-07-12 09:52:26

标签: php mysql sql arrays

在我的网站上,我正在尝试编写一个功能,类似于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']。我一直在盯着这段代码,有人能发现我做错了吗?提前谢谢

2 个答案:

答案 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