从第一个表中提取数据并使用其值从其他表中提取数据

时间:2014-07-20 19:08:47

标签: php mysql

我正在为我的博客创建一个关注机制,这是网站的一部分。因此,当user想要关注其他user时,他会点击关注按钮,然后在table: follow中插入他的email_idto-be-follow-user's email_id。现在,当我想在页面上显示所关注用户的博客时,我会从follow table中提取数据,其中包含我所关注的用户的所有email_id's,然后我想要使用这些email_id'sblog table中提取所有用户(我所遵循的)email_id的数据。

问题是我无法执行第二部分,从第二个表格中提取数据,我收到了所有我收到的电子邮件,但无法获取他们的博客。

最后我发布了代码。

$query= "select follow_user from follow where my_email='".$_SESSION['email']."'";

$data=mysql_query($query);
if (!$data) { // add this check.
    die('Invalid query: ' . mysql_error()) ;
}

while($row=mysql_fetch_array($data)){
    echo $row['follow_user'];
    echo "<br>";
    $query="select * from blog where my_email='".$row['follow_user']."'";
    $data=mysql_query($query);
    if (!$data) { // add this check.
        die('Invalid query: ' . mysql_error()) ;
    }
    while($row=mysql_fetch_array($data)){
        echo $row['subject'];
        echo "<br>";
        echo $row['my_email'];
        echo "<br>";
    }
}

1 个答案:

答案 0 :(得分:0)

从两个表中获取相关数据的最简单方法是使用JOIN

此处有关JOIN的更多信息:
http://dev.mysql.com/doc/refman/5.0/en/join.html

示例:

SELECT blog.entry
FROM blog
INNER JOIN follow ON blog.email_id = follow.followed_email_id
WHERE follow.email_id = 32

这将为您提供各种follow_email_id撰写的博客中的所有输入字段,其中关注者email_id为32。

内部联接确保您获得匹配的内容,并且只匹配匹配的内容。


更新以上新代码:

您仍然只需要一个查询。如果数据库位于真实的生产环境中,那么在循环中执行大量查询会导致数据库被终止。

您的代码变得更加简单,并且只能因为一次查询无效而失败:

$query= "
    SELECT blog.*, follow.follow_user
    FROM blog
    INNER JOIN follow ON blog.my_email = follow.follow_user
    WHERE follow.follow_user = {$_SESSION['email']}
";

$data=mysql_query($query);
if (!$data) { // add this check.
    die('Invalid query: ' . mysql_error()) ;
}

while($row=mysql_fetch_array($data)){
    echo $row['follow_user'];
    echo "<br>";
    echo $row['subject'];
    echo "<br>";
    echo $row['my_email'];
    echo "<br>";
}