В то время как цикл, который записывает одно имя, подключенное к четырем различным курсам четыре раза, как исправить - PullRequest
0 голосов
/ 22 января 2019

У меня есть таблица HTML, в которой я показываю имя, фамилию ... ... и курсы человека, проблема в том, что, когда у человека есть более одного курса в базе данных (например, 3 курса), времяЦикл напишет в строке

alex alexia ... ...  course 1
alex alexia ... ... course 2
alex alexia... ... course 3

Если вы можете помочь мне сгруппировать курсы и названия в одну строку, с отображением всех их, потому что если я использую группу, то показывает одно имя, но только одноКонечно (не все) Я попытался сделать это с помощью столбца флага в таблице Personale, которая установлена ​​в 1, если строка записана, но не работает

$formazione=mysqli_query($conn,"SELECT Formazione.Data_Formazione,Personale.*,Corso.*  FROM Formazione NATURAL JOIN Personale NATURAL JOIN Corso  ORDER BY Personale.Nome ASC;");
while (($row2 = mysqli_fetch_assoc($formazione))){ 
   $flagPersonale=$row2['Flag_Personale'];
   $idPersonale=$row2['ID_Personale'];
   $aggFormazione=$row2['Aggiornamento_Formazione'];
   $nomeCorso=$row2['Nome_Corso'];
   $dataFormazione=$row2['Data_Formazione'];
   $nome=$row2["Nome"];
   $cognome=$row2["Cognome"];
   $ruolo=$row2["Ruolo"];
   $plesso=$row2["Plesso"]; 
   $flagCorso=$row2["Flag_Corso"];
   $nomEcogn=$nome+$cognome;
   if($flagPersonale==0){
   $inserimento = "UPDATE Personale SET Flag_Personale = 1
   WHERE ID_Personale = $idPersonale";
   if(mysqli_query($conn, $inserimento)) {
    echo "<tr><td class=\"$nome\" id=\"$nome\">";
    echo "<input id=\"$nomEcogn\" type=\"text\" class =\"it\" value=\"$nome\" 
    readonly=\"readonly\"></td><td><input type=\"text\" class =\"it\" 
    value=\"$cognome\" readonly=\"readonly\"></td><td><input type=\"text\" 
    class =\"it\" value=\"$ruolo\" readonly=\"readonly\"></td><td><input 
    type=\"text\" class =\"it\" value=\"$plesso\" readonly=\"readonly\"></td> 
    <td><input type=\"text\" class =\"it\" value=\"$nomeCorso\" 
    readonly=\"readonly\"> <button id=\"modifica\"><button id=\"Elimina\"></td> 
    </tr>";     
  } 
  else {
    echo" mysqli_connect_error()";
  }
}

Я просто хочу сделать отображениеalex alexia ... ... курс 1, курс2, курс3 в один ряд, спасибо!

1 Ответ

0 голосов
/ 22 января 2019

Для MySQL рассмотрим агрегированный запрос с использованием функции GROUP_CONCAT, которая может возвращать список элементов.Пожалуйста, настройте ваш запрос в соответствии со спецификацией ниже.Пожалуйста, соблюдайте правила SQL GROUP BY (которые в зависимости от настроек, MySQL может расходиться) (т. Е. Следуйте настройкам ONLY_FULL_GROUP_BY).

SELECT p.name, p.surname, 
       GROUP_CONCAT(course SEPARATOR ',') AS course_list
FROM persons p
JOIN courses c 
  ON p.person_id = c.person_id
GROUP BY p.name, p.surname

Это может потребовать присоединенияна запрос уровня вашего подразделения, как указано выше.

SELECT f.Data_Formazione, p.*, agg.course_list 
FROM Formazione f
NATURAL JOIN Personale p
INNER JOIN 
   (SELECT c.person_id, GROUP_CONCAT(course SEPARATOR ',') AS course_list
    FROM courses c ON 
    GROUP BY c.person_id
   ) AS agg
  ON agg.person_id = p.person_id
ORDER BY p.Nome ASC;

Затем в PHP вы можете explode разделить запятую список курсов в массив:

$courses_array = explode(",", $sql_data['course_list']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...