我正在为用户构建关注者列表。我有两个表,第一个显示用户之间的关系,第二个表包含每个用户配置文件信息。在下面的代码中,我首先从用户关系表中选择一个变量{$ 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>" ;
}
答案 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>" ;
}
}