我在数据库中有两个表。在报告中,我存储报告信息,在report_roles中,我正在分配哪个用户可以访问报告。
reports +--+-----------+---------------+ |id|report_name|report_filename| +--+-----------+---------------+ |13|Report 1 |reportname1 | |14|Report 2 |reportname2 | |15|Report 3 |reportname3 | +--+-----------+---------------+ report_roles +---------+-------+ |report_id|user_id| +---------+-------+ |14 |1 | |13 |1 | |14 |2 | |13 |2 | +---------+-------+
我想显示带有复选框的表格报告中的所有报告,并仅检查与用户ID关联的report_roles中添加的报告。这是我正在运行的代码:
$id = $_POST['user_id'];
$query = "SELECT * FROM reports LEFT JOIN report_roles ON report_roles.report_id = reports.id";
$sql = mysqli_query($mysqli, $query);
if (!$sql) {
printf("Error: %s\n", mysqli_error($mysqli));
exit();
}
while($row = mysqli_fetch_array($sql, MYSQLI_ASSOC) ) {
if ($row['user_id'] == $id) {
echo "<input type='checkbox' name='" . ($row['id']) . "'" . "id='" . ($row['id']) . "'" . "value='yes'" . ($row['user_id'] == $id ? 'checked' : '') .">";
echo $row['report_name'];
} else {
echo "<input type='checkbox' name='" . ($row['id']) . "'" . "id='" . ($row['id']) . "'" . "value='yes'" . ">";
echo $row['report_name'];
}
}
如果$ id = 1我收到了这个:
|checked| Report2 |checked| Report 1 |unchecked| Report2 |unchecked| Report 1 |unchecked| Report3
根据我编写的代码完全正确。我无法弄清楚如何显示报告表中没有重复项的所有报告,只检查report_roles中可用的报告,如下所示:
|checked| Report2 |checked| Report 1 |unchecked| Report3
我确信我必须使用联接更改查询。尝试使用两个单独的查询来完成此任务,但没有连接但没有运气。希望有人能提供帮助。
答案 0 :(得分:0)
实际上我只是在我的查询中遗漏了一条语句,感谢Bernd Buffed我意识到我必须在查询结尾添加一个AND,它应该是这样的:
$query = "SELECT * FROM reports LEFT JOIN report_roles ON report_roles.report_id = reports.id AND user_id = $id";
直到现在我添加了WHERE user_id = $ id并且只接收了report_roles中存在的那些报告。使用AND我从报告表接收所有报告,我的脚本只能检查基于简单的php检查的report_roles中的那些报告。