我有这个代码
<html>
<head>
<title> trans </title>
<body>
<style>
table, th, td {
border: 1px solid black;
width: 900px;
margin: auto;
}
h3{
text-align: center;
margin-top: 20px;
}
</style>
<?php
$con = mysqli_connect('localhost', 'root', '');
mysqli_select_db($con,"uoh");
$q = " SELECT * FROM `degree_plan` LEFT JOIN courses ON
degree_plan.course_number=courses.course_number
where major='COE'";
$result = mysqli_query($con , $q) ;
if($result){
echo "<br />";
echo "<table>";
echo "<tr>";
echo "<th>courses</th>";
echo "<th>term_no</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row["code"]. "</td>";
echo "<td>" . $row["term_no"]. "</td>";
echo "</tr>";
}
echo "</table>";
}
?>
</body>
</html>
这段代码的输出是这样的。这里每门课程都是一排,但我不想那样。
--------------------------
course term_no
--------------------------
CHEM 101 1
-------------------------
ENGL 101 1
-------------------------
MATH 101 2
--------------------------
PE 101 2
我如何使代码不分离具有相同term_no的课程。我想要这样的输出
--------------------------
course term_no
--------------------------
CHEM 101 1
ENGL 101
-------------------------
MATH 101 2
PE 101
您可以执行一个字符串数组,其中每个单元格都包含与单元格 ID 匹配的同一term_no中的所有课程。
试试你当前的 while 循环:
$str = array();
while($row = mysqli_fetch_array($result))
{
$str[$row['term_no']] += ",".$row['code'];
}
foreach ($str as $key => $value)
{
echo "<tr>";
echo "<td>" . $value. "</td>";
echo "<td>" . $key. "</td>";
echo "</tr>";
}
编辑:我更改了代码,现在尝试一下。
以下是我的做法:
我会更改您的 sql 命令以对具有相同值 term_no 的结果进行分组和连接。
SELECT group_concat(c.course), dp.term_no FROM `degree_plan` as dp LEFT JOIN courses as c ON
degree_plan.course_number=courses.course_number
where major='COE'
GROUP BY dp.term_no
完成此操作后,我将恢复按,
连接和分隔的数据。有了这个,我可以做preg_replace('/,/' , '<br>', $row["code"])
用'<br>
替换每个,
,或者我可以在迭代(explode(",", $value)
)上分解所需的值,创建一个数组并做我想做的事情。
请注意,由于我不知道您的数据库的确切结构,我假设表课程包含课程的名称。进行必要的调整。