php - 写入单个名称四次连接到四个不同课程的while循环,如何修复
问题描述
我有一个 HTML 表,我在其中显示姓氏......以及一个人的课程,问题是当一个人在数据库中有多个课程(如 3 个课程)时,while 循环将写入连续
alex alexia ... ... course 1
alex alexia ... ... course 2
alex alexia... ... course 3
如果您可以帮助我将课程和名称分组在一行中,并显示所有课程,因为如果我使用 group by 它会显示一个名称,但只有一门课程(不是全部)我尝试使用标志列来做到这一点如果一行写入但它不起作用,则在表 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 .... course 1,course2,course3,谢谢!
解决方案
对于 MySQL,考虑使用GROUP_CONCAT
可以返回项目列表的函数的聚合查询。请将您的查询调整为以下规格。请正确遵守GROUP BY
(取决于设置,MySQL 可以发散)的 SQL 规则(即遵循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']);
推荐阅读
- celery - Celery 任务在不考虑 if 块的情况下运行?
- remix - 如何使用chainlink获取KCC pricefeed
- c# - 在 ASP.NET Core Web API 应用程序上配置 CORS 时出现 CORS 错误
- node.js - 错误 TS2305:模块 '"tls"' 没有导出的成员 'TLSSocketOptions'
- python - 在 Camelot 中加入由分页符分隔的表
- c++ - 在 xcode 中使用有效负载中止
- r - 跟进:将给定的缺失列从 data.frame 放回 dta.frames 列表
- lua - 当我购买 DevProduct (Roblox LUA) 时,我怎样才能让事情发生
- javascript - document.getElementByClassName 无法使用父类获取子元素的值
- python - Webscrape - 不同长度的字段