我创建了一个带有users
表和teams
表的表联接。用户只能属于一个团队,因此他们的帐户有一个team_id。
如何显示所有不同的组以及该组中的成员?
这是我的密码。目前,它只显示id为1的团队,用户表中有1个用户的team_id为1
<?php
include_once 'dbconfig.php';
if(!$user->is_loggedin())
{
$user->redirect('index.php');
}
$user_id = $_SESSION['user_session'];
$stmt = $DB_con->prepare("SELECT * FROM teams
INNER JOIN users
ON teams.id=users.team_id
HAVING teams.id=1");
$stmt->execute();
$teamRow=$stmt->fetchall(PDO::FETCH_ASSOC);
?>
<h1>Teams</h1>
<table>
<tr>
<?php foreach($teamRow as $row): ?>
<th><?=$row['team_name']?></th>
</tr>
</tr>
<td> <?=$row['user_name']?></td>
</tr>
<?php endforeach; ?>
<a href="home.php">Home</a>
</table>
尝试此代码
1) 从查询中删除HAVING clause
,只让用户使用simple JOIN
并添加ORDER BY team_name ASC
2) 在php循环中执行逻辑
<table>
<?php $teamName = ''; // assign teamName for loop ?>
<?php foreach($teamRow as $row): ?>
<?php
if($row['team_name'] != $teamName) {
$teamName = $row['team_name']; // set teamName for loop if not equal
?>
<tr>
<th><?=$row['team_name']?></th>
</tr>
<?php } ?>
<tr>
<td><?=$row['user_name']?></td>
</tr>
<?php endforeach; ?>
<tr>
<td><a href="home.php">Home</a></td>
</tr>
</table>
逻辑是:(用例)
-在循环中,如果$row team_name不等于teamName,则显示teamName并设置
-然后显示user_name
-再次循环,$row team_name等于teamName,因此不要再次显示teamName
希望它能帮助