我需要员工的姓名一次显示在每个姓名旁边的电话号码,如果员工有额外的电话号码需要在第一个旁边显示,到目前为止我得到的是每次员工有额外的电话号码php再次写下他的名字。
$db = new PDO('mysql:host=localhost;dbname=eshop;charset=utf8', 'root', '');
$sql = "SELECT e.firstName,e.lastName,p.phone FROM employees AS e";
$sql .= " LEFT JOIN phones AS p ON p.employeeID = e.employeeID";
$sql .= " ORDER BY e.firstName ASC";
$query = $db->prepare($sql);
$query->setFetchMode(PDO::FETCH_OBJ);
$query->execute();
$result = $query->fetchAll();
$table = "<table>";
$table .= "<td>Employee</td>";
$table .= "<td>Phones</td>";
foreach($result as $row){
$table .= "<tr>";
$table .= "<td> {$row->firstName} {$row->lastName} </td>";
$table .= "<td> {$row->phone}</td>";
}
$table .= "</table>";
?>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div><?= $table ; ?> </div>
</body>
</html>
答案 0 :(得分:2)
$sql = "SELECT e.firstName,e.lastName, GROUP_CONCAT(p.phone) as phone FROM employees AS e";
$sql .= " LEFT JOIN phones AS p ON p.employeeID = e.employeeID";
$sql .= " GROUP BY p.employeeID ORDER BY e.firstName ASC";
使用此查询希望这会对您有所帮助
修改强>
mysql的group by和group_concat的解释
您可以使用GROUP BY对列和GROUP_CONCAT函数中的值进行分组,以在单行中显示这些组值。
但是请注意,GROUP_CONCAT在mysql中有限制,您可以通过更新group_concat_max_len变量的值来增加此限制。
SET group_concat_max_len = 2048;
答案 1 :(得分:0)
实现的可能性超过1种,
1:在电话桌上使用群组联系人拨打电话号码 例如:选择group_concat(phoneno),从员工左侧加入电话的雇员名称.Employeeid = employee。员工ID。 2:多重查询 首先获取员工然后使用员工参考获取电话并更改循环代码