PHP从表中获取变量,然后使用该变量从第二个表中进行选择

时间:2015-01-24 20:48:35

标签: php mysql arrays

我正在为用户构建关注者列表。我有两个表,第一个显示用户之间的关系,第二个表包含每个用户配置文件信息。在下面的代码中,我首先从用户关系表中选择一个变量{$ userid1} ,它是当前用户之后的所有用户ID的值。当我回显{$ userid1}时,我得到了跟随当前用户的所有用户ID,但它是一个巨大的连接字符串。我想获取变量{$ userid1}并使用它从配置文件表中提取每个跟随者的用户数据。 我希望每个用户的数据都显示在当前用户之后的配置文件表中。但是代码可以正常工作,但只会从配置文件表中提取最新的关注者配置文件数据。我在考虑将变量{$ userid1}放入数组并使用foreach,但我不确定语法是怎样的。有谁知道它是如何工作的?问题是变量一次只能保存一个值。

第一个查询的输出是来自当前用户之后的用户的iduser编号。

e.g。当回显echo $userid1 . " ";时,结果是ID如下所示: 45 56 67 我在echo语句中的数字之间添加了一个空格。

$sql = mysql_query("SELECT * FROM followrelations Where iduser2='$uid' "); //followers from relations table
                    while($row = mysql_fetch_array($sql)){
$userid1 = $row['iduser1']; 
echo $userid1 . " ";


}
$sql = mysql_query("SELECT * FROM profile where iduser=$userid1 ORDER BY username ");//get followers infor from profile using variable
    while($row = mysql_fetch_array($sql)){  
    $iduserf = $row['iduser'];  //userid2 requires different var name so program does not get mixed up                      
    $username = $row['username'];
    $bio = $row['bio'];
    $avatar = $row['avatar'];

echo "
<div style='width:500px;height:100px;padding:20px 20px;float:left;border: solid black 1px;'>
<a href='profile.php?uid=$iduserf'><img src=$avatar height=50px width=50px /></a></br>
<a href='profile.php?uid=$iduserf'>$username </a></br>
</div>" ;

}

3 个答案:

答案 0 :(得分:0)

您可能正在寻找子查询:

SELECT username 
FROM user_table 
WHERE id IN( SELECT user_id WHERE linked_user_id = 123 )

这是一个更好的例子。这将从user_table中选择所有用户的用户名,其中ID存在于子查询中 反过来,子查询会选择链接用户user_id所在的所有id=123 子查询与在PHP中创建数组非常相似,并将该信息用于下一个查询。

小注意:小心子查询。它们在我上面的例子中是完美的,但是例如并非所有服务器都支持子查询中的限制。 可能会影响效果。更复杂的功能不适用于子查询。尽量保持这些简单。

答案 1 :(得分:0)

您可以使用以下内容在单个查询中执行此操作:

$id = mysql_real_escape_string($uid);
$sql = <<<SQL
SELECT
  p.*
FROM profile as p
  INNER JOIN followrelations as fl
    ON fl.iduser1 = p.userid
WHERE fl.iduser2 = $id
ORDER BY username
SQL;
$stmt = mysql_query($sql);

while($row = mysql_fetch_array($stmt)){
// Rest of the logic here
}

这将返回profile表中的所有字段。请注意,mysql_扩展名已弃用且不安全 - 您不应在新代码中使用它。请查看How to replace MySQL functions with PDO?How can I prevent SQL injection in PHP?,了解有关此问题的一些良好做法。

答案 2 :(得分:0)

发现我的错误,第二个$ sql应该是另一个名字(我把它命名为$ sql1),而后半部分应该都在第一个。

 $sql = mysql_query("SELECT * FROM followrelations Where iduser2='$uid' "); //followers session uid

                        while($row = mysql_fetch_array($sql)){


    $userid1 = $row['iduser1']; 


      $sql1 = mysql_query("SELECT * FROM profile where iduser='$userid1' ORDER BY username ");//get followers infor from profile using variable
        while($row = mysql_fetch_array($sql1)){ 
        $iduserf = $row['iduser'];  //userid2 requires different var name so program does not get mixed up                      
        $username = $row['username'];
        $bio = $row['bio'];
        $avatar = $row['avatar'];

    echo "
    <div style='width:500px;height:100px;padding:20px 20px;float:left;border: solid black 1px;'>
    <a href='profile.php?uid=$iduserf'><img src=$avatar height=50px width=50px /></a></br>
    <a href='profile.php?uid=$iduserf'>$username </a></br>
    </div>" ;                                   
    }
    }