我正在尝试使用PHP 7,MySQL和Bootstrap创建搜索模块。唯一的问题是,如果一个角色有更多的域,则该角色会在2个不同的域中显示两次。
这是弹出窗口 Popup window
这是3表: Tables
我试图从数据库中选择多个数据并将其添加到数组中,但我是PHP和MySQL的新手。 这是PHP代码:
$output = '';
$sql="SELECT * FROM (SELECT role.role_id AS roleID, role.role_name AS roleNAME, domain.domain_name AS domainNAME
FROM role
LEFT OUTER JOIN role_domain ON role.role_id=role_domain.role_id
LEFT OUTER JOIN domain ON domain.domain_id=role_domain.domain_id
UNION
SELECT role.role_id AS roleID, role.role_name AS roleNAME, domain.domain_name AS domainNAME
FROM role_domain
RIGHT OUTER JOIN domain ON domain.domain_id=role_domain.domain_id
RIGHT OUTER JOIN role ON role.role_id=role_domain.role_id) AS U
WHERE U.roleID='".$_POST["szerep_id"]."'";
$result = mysqli_query($conn,$sql);
// A query that stores the multiple roles
$query="SELECT role.role_name AS roleName, COUNT(role_domain.role_id) as role_count FROM role
LEFT OUTER JOIN role_domain ON role.role_id = role_domain.role_id
GROUP BY role_domain.role_id
HAVING role_count > 1";
$result1= mysqli_query($conn, $query);
// Put the multiple roles to an array
while($row=mysqli_fetch_array($result1))
{
$inspector[]=$row["roleName"];
}
// Create the table
$output .= '
<div class="table-responsive">
<table class="table table-bordered">';
// If the query has an error, it writes the error
if($result===false)
{
die(print_r(mysqli_error($conn), true));
}
// Fill up the Popup Window with the information provided
while($row=mysqli_fetch_array($result))
{
$output .= '
<tr>
<td><label><b>Role name:</b></label></td>
<td>'.$row["roleNAME"].'</td>
</tr>
<tr>
<td><label><b>Domain:</b></label></td>
<td>'.$row["domainNAME"].'</td>
</tr>
';
}
$output .= "</table></div>";
echo $output;
// Frees all resources for the specified statement
$stmt=$conn->prepare($sql);
mysqli_stmt_free_result($stmt);
}
}
else
{
echo "Connection could not be established.<br />";
die(print_r(mysqli_error($conn), true));
}
感谢您的帮助!
答案 0 :(得分:0)
假设您的代码正常运行,
您的预期目标是只显示每列1条记录,并且您可以使用相同的值:SELECT DISTINCT(you_column_name)
例如,如果您希望角色仅在同一个域中出现一次,则可以使用DISTINCT(domain.domain_id)
我希望这能解决你的问题。
答案 1 :(得分:0)
您需要显示:
与其所有域名的角色
您应该将布局更改为:
.table {
border-collapse: collapse;
width: 100%;
}
.table td, .table th {
border: 1px solid #ddd;
padding: 8px;
}
&#13;
<table class="table">
<tr>
<td>Role name</td>
<td>role1</td>
</tr>
<tr>
<td>Domains</td>
<td>
<ul>
<li>domain1</li>
<li>domain2</li>
</ul>
</td>
</tr>
</table>
&#13;
关于SQL:
将数据存储在数组中,然后对该数组进行分组: Group array values based on key in php?
组可以很容易地以我提供的格式输出表格
更新:如果您不想对阵列进行分组,只需按角色排序查询,并在角色ID更改时创建新角色