Как вставить значение с тем же идентификатором в одной ячейке в PHPExcell

У меня есть файл excell, созданный из запроса php. Итак, у меня внутри файла excel есть: имя пользователя, проект, процесс. Вот первое имя пользователя таблицы:

uid| username| salary|  
---+---------+-------+
1  | bob     | 0     |
2  | barikan | 0     |
3  | beny    | 0     |

Второй столовый процесс:

projectNo| process | proc_leader|  
---------+---------+------------+
1610004  | ANM BLD | barikan    |
1610004  | BGD CUP | barikan    |
1610005  | ANM BLD | bob        |
1610006  | BGD CUP | beny       |

И таблица проекта:

projectNo| title|  
---------+------+
1610004  | TMNT |
1610005  | LEON |
1610006  | MAT  |

Внутри моего файла excel я хочу напечатать что-то вроде этого:

username|      TMNT        | LEON    | MAT     | 
--------+------------------+---------+---------+
barikan | ANM BLD, BGD CUP | N/A     | N/A     |
beny    | N/A              | N/A     | BGD CUP |
bob     | N/A              | ANM BLD |         |

Я могу распечатать проект и имя пользователя:

$objPHPExcel = new PHPExcel();
$F = $objPHPExcel->getActiveSheet();
$F->setCellValue('A1', "Username");

$request="SELECT * FROM project";
$result=$conn->query($request);//get the result (ressource)

$Letter='B';
while($row = $result->fetch_assoc())
{//extract each record

    $projectNo=$row["projectNo"];
    $F->setCellValue($Letter.'1', ' '.$projectNo.' ');
    $F->getRowDimension('1')->setRowHeight(20);
    $F->getColumnDimension($Letter)->setWidth(30);
    ++$Letter;
}

$request2="SELECT *  FROM user WHERE username='barikan'";
//$request2="SELECT *  FROM user ORDER BY username ASC";
$result2= $conn->query($request2);//get the result (ressource)

$Number=2;
while($row2 = $result2->fetch_assoc())
{//extract each record
    //$projectNum=$row2["projectNo"];
    $username=$row2["username"];
    $F->setCellValue('A'.$Number, $row2["username"]);
    $F->getColumnDimension('A')->setWidth(20);
    ++$Number;
}

И все еще работаем над тем, как печатать процессы для каждого имени пользователя, но теперь я просто печатаю его только для одного имени:

$request3="SELECT process, projectNo FROM proc_leader INNER JOIN user pl ON (proc_leader = pl.username)
WHERE 
proc_leader.proc_leader = 'barikan' ";
//proc_leader.proc_leader = '$username' AND proc_leader.projectNo = '$projectNo'";
$result3= $conn->query($request3);//get the result (ressource)
$Let='B';
while($row3 = $result3->fetch_assoc())
{//extract each record
    $prNo=$row3["projectNo"];
    $F->setCellValue($Let.'2', ''.$prNo.'  '.$row3["process"].'');
    ++$Let;
    //++$Number;
}

Итак, как поставить процесс с тем же идентификатором в одной ячейке? спасибо

РЕДАКТИРОВАТЬ

Хорошо, спасибо за идею использовать group_concat, но когда я запустил sql, я не получу все имена. Посмотрите, вот моя таблица proc_leader : proc_leader

И что я получил после запуска запроса: SELECT projectNo, group_concat(process) AS processes, proc_leader FROM proc_leader GROUP BY projectNo

результат

Отсутствует имя пользователя «candy». Зачем? Спасибо за помощь

php,mysql,excel,phpexcel,

0

Ответов: 1


0 принят

Если я правильно понимаю, что вы хотите, вы можете изменить свой запрос в таблице проекта:

SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM project
GROUP BY projectNo;

в зависимости от версии MySQL, которая может потребоваться

SELECT projectNo, group_concat(process) AS processes, ANY_VALUE(proc_leader)
FROM project
GROUP BY projectNo;

функция group_concat будет группировать все процессы и запятые, разделяя их так, как вы показываете на своем требуемом листе excel - к столбцу можно получить доступ с именем «процессы». http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html

Более поздние версии MySQL не позволяют выбирать неагрегированные столбцы - если вы специально не говорите об этом, вы не возражаете, какая строка имеет значение, например, с помощью функции ANY_VALUE. http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

Если у вас может быть другой proc_leader для конкретного проектаNo - тогда запрос может быть:

SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM project
GROUP BY projectNo, proc_leader;

Другим способом было бы просто искать ваш лист excel для строки с совпадающим именем пользователя, а затем искать правильный столбец и добавлять к соответствующей ячейке.

PHP, MySQL, первенствует, PHPExcel,