PHP+MySQL join语句将多个值作为行排列在MySQL\u fetch数组中
我使用的是一个MySQL内部JOIN语句,它从连接中返回主表中一个不同记录的各种结果,类似于 我的问题是PHP+MySQL join语句将多个值作为行排列在MySQL\u fetch数组中,php,mysql,Php,Mysql,我使用的是一个MySQL内部JOIN语句,它从连接中返回主表中一个不同记录的各种结果,类似于 我的问题是 SELECT cl.*, dep.dept_name FROM epapers.clientelle cl INNER JOIN epapers.dept_staff_users depu ON depu.user_id=cl.user_id INNER JOIN epapers.dept dep ON dep.dept_id=depu.dept_id group by
SELECT cl.*, dep.dept_name
FROM epapers.clientelle cl
INNER JOIN epapers.dept_staff_users depu
ON depu.user_id=cl.user_id
INNER JOIN epapers.dept dep
ON dep.dept_id=depu.dept_id
group by cl.user_id
ORDER BY cl.user_name ASC,
我想在下面的表格中显示以上内容
echo "<tr bgcolor='#CCCCCC'>
<td >$num</td><td >".$row[user_id]."</td><td>".$row[user_name]."</td>
<td >".$row[fname]."</td><td >".$row[lname]."</td>
<td >".$row[dept_name]."</td>
<td >".$row[dept_name]."</td>
<td >".$row[dept_name]."</td>
<td >".$row[email]."</td>";
$TrID = "$row[user_id]";
echo "<td >";
echo '<form name="activate" action="activate_acc.php" method="POST" ;">';
echo "<input type='hidden' name='TrID' value='$TrID'>";
echo "<input type='checkbox' name='active' value='$row[active]'>";
echo '<input type="submit" name="Submit" value="Delete">';
echo '</form>';
echo "</td >";
...
注意:部门最多可以是3个部门。如何在一行中为部门返回mysql查询结果?如果您使用mysql,您可以使用GROUP_CONCAT,但您必须进行一些后期处理,这有点难看
SELECT cl.*, GROUP_CONCAT( DISTINCT dep.dept_name SEPARATOR '|' ) as dept_name
FROM epapers.clientelle cl
INNER JOIN epapers.dept_staff_users depu
ON depu.user_id=cl.user_id
INNER JOIN epapers.dept dep
ON dep.dept_id=depu.dept_id
group by cl.user_id
ORDER BY cl.user_name ASC
foreach( ....
$departments = explode( '|', $row['dept_name'] );
...
if( isset( $departments[0] ) ) {
echo "<td>{$departments[0]}</td>";
} else {
echo "<td></td>";
}
// same check
echo "<td>{$departments[1]}</td>";
// same check
echo "<td>{$departments[2]}</td>";
这在运行时是一种非规范化…如果您使用的是MySQL,您可以使用GROUP_CONCAT,但您必须进行一些后期处理,这有点难看
SELECT cl.*, GROUP_CONCAT( DISTINCT dep.dept_name SEPARATOR '|' ) as dept_name
FROM epapers.clientelle cl
INNER JOIN epapers.dept_staff_users depu
ON depu.user_id=cl.user_id
INNER JOIN epapers.dept dep
ON dep.dept_id=depu.dept_id
group by cl.user_id
ORDER BY cl.user_name ASC
foreach( ....
$departments = explode( '|', $row['dept_name'] );
...
if( isset( $departments[0] ) ) {
echo "<td>{$departments[0]}</td>";
} else {
echo "<td></td>";
}
// same check
echo "<td>{$departments[1]}</td>";
// same check
echo "<td>{$departments[2]}</td>";
这在运行时是一种非规范化…使用mysql查询的方法是为三个部门中的每一个连接表,例如:选择a.dept\u id作为dept\u 1 b.dept\u id作为dept\u 2等,并使用不同的for每个dept id连接同一个表。这种方法非常需要处理器。以编写查询的方式获取数据,然后在使用之前使用函数处理数据,速度会快得多。下面是一个简单的例子,说明我将如何做到这一点:
function prep_data($mysql_result)
{
$results = array();
$work = array();
while ($row = mysql_fetch_assoc($mysql_result))
{
if ($work['user_id'] == $row['user_id'])
{
// just add dept data to dept array
$dept[] = $row['dept_id'];
}
else
{
// data changed
if (isset($work['user_id']))
{
// assign dept array to data array
$work['dept_id'] = $dept;
// add work array to results collection
array_push($results, $work);
// start working with the new user_id
$work = $row;
$dept = array($row['dept_id']);
continue;
}
else
{
// this is first pass. grab the row data and start the dept[] array;
$work = $row;
$dept = array($row['dept_id']);
continue;
}
}
}
$work['dept_id'] = $dept;
array_push($results, $work);
return($results);
}
//祝你好运使用mysql查询的方法是为三个部门中的每一个连接表,例如:选择a.dept_id作为dept_1 b.dept_id作为dept_2等,并使用不同的for每个dept id连接同一个表。这种方法非常需要处理器。以编写查询的方式获取数据,然后在使用之前使用函数处理数据,速度会快得多。下面是一个简单的例子,说明我将如何做到这一点:
function prep_data($mysql_result)
{
$results = array();
$work = array();
while ($row = mysql_fetch_assoc($mysql_result))
{
if ($work['user_id'] == $row['user_id'])
{
// just add dept data to dept array
$dept[] = $row['dept_id'];
}
else
{
// data changed
if (isset($work['user_id']))
{
// assign dept array to data array
$work['dept_id'] = $dept;
// add work array to results collection
array_push($results, $work);
// start working with the new user_id
$work = $row;
$dept = array($row['dept_id']);
continue;
}
else
{
// this is first pass. grab the row data and start the dept[] array;
$work = $row;
$dept = array($row['dept_id']);
continue;
}
}
}
$work['dept_id'] = $dept;
array_push($results, $work);
return($results);
}
//祝你好运这是可行的,但是因为我使用的是while$row=mysql\u fetch\u array$result,所以我不得不使用这个:。。。。echo$num.$row[user\u id]…$row[user\u name]$行[fname]…$row[lname]$部门=分解“|”,$row['dept_name';如果isset$departments[0]{echo{$departments[0]};}或者{echo;}……这是可行的,但是因为我使用的是while$row=mysql\u fetch\u array$result,所以我不得不使用它:。。。。echo$num.$row[user\u id]…$row[user\u name]$行[fname]…$row[lname]$部门=分解“|”,$row['dept_name';如果设置为$departments[0]{echo{$departments[0]};}否则{echo;}……我决定使用meouw的答案,因为它使用的是我使用的同一个查询,更容易向我的客户解释。我决定使用meouw的答案,因为它使用的是我使用的同一个查询,更容易向我的客户解释。