Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+MySQL join语句将多个值作为行排列在MySQL\u fetch数组中_Php_Mysql - Fatal编程技术网

PHP+MySQL join语句将多个值作为行排列在MySQL\u fetch数组中

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

我使用的是一个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 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的答案,因为它使用的是我使用的同一个查询,更容易向我的客户解释。