首页 文章

PHP MySQL连接语句将多个值排列为mysql_fetch数组中的行

提问于
浏览
0

我正在使用MySQL INNER JOIN语句,它从连接返回主表中一个不同记录的各种结果,类似于How to Join Multiple Joins yet return Distinct Values我的查询是

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查询结果?

2 回答

  • 0

    如果您使用的是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>";
    

    它在运行时有点非规范化......

  • 3

    以及使用mysql查询执行此操作的方法是为三个部门中的每个部门加入表格,例如:选择a.dept_id作为dept_1 b.dept_id作为dept_2等,并为每个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);
    }
    

    // 祝好运

相关问题