我正在创建一个面板,我可以管理我的用户,我想显示用户名,电子邮件,我想显示放置了多少订单。在我的数据库中,我有2个表1个用户,1个订单。我正在订单表中保存用户的用户名,所以我知道用户已经购买了它。
但是,我想在foreach循环中编写一个包含我的用户概述的面板。我有用户名循环,电子邮件如何我可以添加订单金额。
<?php
$model = $connection->createCommand('SELECT * FROM user');
$adminAccounts = $model->queryAll();
foreach($adminAccounts as $results){
$accounts['id'] = $account_id;
$accounts['username'] = $results['username'];
$accounts['email'] = $results['email'];
$accounts['rest'] = $results;
echo "
<tr>
<td>
<p>" . $newValidation->safeEcho($accounts['username']) ." </p>
</td>
<td>
<p>" . $newValidation->safeEcho($accounts['email'])." </p>
</td>
</tr>
";
}
让我们说我的桌子看起来像这样
<username> <email>
现在我希望它看起来像这样
<username> <email> <total orders>
我在想我应该使用内连接,但我该怎么做呢?
格尔茨
答案 0 :(得分:1)
我认为您可以将查询更改为:
SELECT user.*, t.cnt FROM user JOIN (SELECT gebruikersnaam, COUNT(*) AS cnt FROM orders GROUP BY gebruikersnaam) t ON user.username = t.gebruikersnaam
使用此查询,您可以获取用户订单,但是您将跳过没有订单的用户,因此要获得它们,您可以执行LEFT JOIN:
SELECT user.*, t.cnt FROM user LEFT JOIN (SELECT gebruikersnaam, COUNT(*) AS cnt FROM orders GROUP BY gebruikersnaam) t ON user.username = t.gebruikersnaam
我建议表顺序中用户的字段是用户名。在您的问题中,您指出该表是用户,但在您的查询表中是用户。我正在使用用户。如果您使用此更改更改当前查询,则可以添加代码:
foreach($adminAccounts as $results){
$accounts['id'] = $account_id;
$accounts['username'] = $results['username'];
$accounts['email'] = $results['email'];
$accounts['total_orders'] = ($results['cnt'] == NULL) ? 0 : $results['cnt']; // orders per user
$accounts['rest'] = $results;
echo "
<tr>
<td>
<p>" . $newValidation->safeEcho($accounts['username']) ." </p>
</td>
<td>
<p>" . $newValidation->safeEcho($accounts['email'])." </p>
</td>
<td>
<p>" . $newValidation->safeEcho($accounts['total_orders'])." </p>
</td>
</tr>
";
}