【问题标题】:PHP mysqli only one user displayedPHP mysqli 只显示一个用户
【发布时间】:2016-10-08 16:34:35
【问题描述】:

我想实现这个

  • john -> 子用户
  • john -> 子用户
  • 标记->子用户
  • 标记->子用户
  • dave -> 子用户
  • dave -> 子用户

但这是出乎意料的输出

  • john -> 子用户
  • john -> 子用户

只出现了用户名john

// Get all the users
$s = $sqlConnection->query('SELECT * FROM accounts');

while ($row = $s->fetch_assoc())
{
    $uarr = explode(',', $row['username']);

    foreach ($uarr as $ueach)
    {        
        // Get all the direct sales
        $query = "SELECT *";
        $query .= " FROM accounts ACC";
        $query .= " INNER JOIN info INF ON ACC.user_id = INF.iuid";
        $query .= " INNER JOIN sales SAL ON ACC.user_id = SAL.suid";
        $query .= " WHERE SAL.mentor = '$ueach'";

        $s = $sqlConnection->query($query);

        if (!$s) 
        {
            die($sqlConnection->error);
        }

        while ($row = $s->fetch_assoc())
        {
            echo $ueach . ' -> ' . $row['username'] . '<br/>';
        }
    }
}

这是数据库结构

帐户

user_id | username |
--------+----------+
 1      | john     |
--------+----------+
 2      | mark     |
--------+----------+
 3      | dave     |
--------+----------+

信息

iuid     |
---------+
1        |
---------+
2        |
---------+
3        |
---------+

销售额

suid    | mentor   |
--------+----------+
 1      | john     |
--------+----------+
 2      | mark     |
--------+----------+
 3      | dave     |
--------+----------+

【问题讨论】:

  • 你确定accounts表的每一行在salesinfo表中都有一行吗?如果不是,您应该使用LEFT JOIN
  • 不确定为什么这里需要两个查询。看来您可以通过一次查询获得所有子用户及其导师。
  • 在我看来,它仍然是一个非常糟糕的数据库设计
  • 哎呀@RiggsFolly - 我错过了。 username 中有什么内容?两个表都有username 列吗?也许你应该向我们展示表格布局 keziah
  • 我会说这个 Wonce more 向我们展示accounts.username列中的内容然后我就去做一些更有成效的事情

标签: php mysql arrays loops mysqli


【解决方案1】:

您可以通过一个查询而不是两个查询来获取所有数据。由于 JOIN,您需要的数据随时可用:

SELECT SAL.mentor AS mentor, ACC.username AS username
FROM accounts ACC
LEFT JOIN info INF ON ACC.user_id = INF.iuid
LEFT JOIN sales SAL ON ACC.user_id = SAL.suid
ORDER BY SAL.mentor

当您返回这些行时,您将拥有$row['mentor']$row['username'] 可供您使用。

$query = "SELECT SAL.mentor AS mentor, ACC.username AS username ";
$query .= "FROM accounts ACC ";
$query .= "LEFT JOIN info INF ON ACC.user_id = INF.iuid ";
$query .= "LEFT JOIN sales SAL ON ACC.user_id = SAL.suid ";
$query .= "ORDER BY SAL.mentor ";

$s = $sqlConnection->query($query);

if (!$s) 
{
     die($sqlConnection->error);
} 
else 
{
    while ($row = $s->fetch_assoc())
   {
        echo $row['mentor'] . ' -> ' . $row['username'] . '<br/>';
   }

}

【讨论】:

  • 我也想要这个,因为稍后我会像上面提到的那样将它保存到数据库中(更新后的帖子)
  • @keziah 这比我更好地回答了您的原始问题。您的更新提供了看似follow-up question 的内容,请尝试坚持使用one question per question,因为help center says 我们应该“避免尝试回答...要求回答多个问题的问题。” 如果你还需要帮助,重新发帖
【解决方案2】:

您正在重新分配结果集,覆盖$s

为您的内部循环查询选择不同的变量

$second = $sqlConnection->query($query);

【讨论】:

  • Shucks 完全错过了
  • 好眼光杰夫 - 我也错过了。当然,如果她的数据库结构正确,她只需要一次查询,就不会遇到问题。
  • 请再次查看我的帖子,因为我添加了一些难以继续前进的内容。请让我知道它以及它背后的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2021-11-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多