PHP mysqli fetch_row-迭代多条记录

PHP mysqli fetch_row-迭代多条记录,php,mysqli,Php,Mysqli,3天来,我一直在搞这个,研究和实验:是时候寻求帮助了 我有一段代码用于在数据库表上循环的日程表显示页面,每个约会类型循环一次。它收集一周内该类型的所有约会,并连续返回,如下所示: +------+------+-----+-----+-----+-----+-----+-----+-----+------+ | Name | Year | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Purp | +------+------+-----+-----+---

3天来,我一直在搞这个,研究和实验:是时候寻求帮助了

我有一段代码用于在数据库表上循环的日程表显示页面,每个约会类型循环一次。它收集一周内该类型的所有约会,并连续返回,如下所示:

+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| Name | Year | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Purp |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| IST  |  NA  | 9-4 |     |     |     |     |     |     | ABC  |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| OT   |  NA  |     | 8-2 | 8-2 | 8-2 | 8-2 |     |     | DEF  |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
我的代码完全按照我的要求工作,但有一个致命的缺陷。如果一个“名称”有多行,我会将其作为我的行:

+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| Name | Year | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Purp |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| IST  |  NA  | 9-4 |     |     |     |     |     |     | ABC  |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| OT   |  NA  |     | 8-2 | 8-2 | 8-2 | 8-2 |     |     | DEF  |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+-+-----+-+-+-+-+-+-----+
| MTG  |      | 1-2 |     |     |     |     |     |     |      | | 1-2 | | | | | | GHI |
|      |      |     |     |     |     |     |     |     |      | |     | | | | | | JKL |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+-+-----+-+-+-+-+-+-----+
因此,它不是插入适当的,而是创建一组全新的。这真的很令人沮丧,因为我确信这是一件简单的事情,但我看不出来…:(

代码:

$apptnamestop=array(“IST”、“OT”、“MTG”、“TR-CN”、“EVENT”、“EN”、“REC”、“TO”);
$daysofweek=数组(“1”、“2”、“3”、“4”、“5”、“6”、“0”);
foreach($apptnamestop作为$name){
打印stru_repeat($tab,8)。“\n”;
打印str_repeat($tab,9)。“$name\n”;
打印stru_repeat($tab,9)。“不适用\N”;
$getdataquery=“选择appointmentName作为名称
,appointmentType为type,appointmentStartDateTime为sdt
,任命EndDateTime为edt,任命目的为purp
从T点开始
其中AppointmentStaffiedStart类似“{$\u SESSION['user\u id']}%”
和任命名称=“$name”
和(任命StartDateTime>=日期(CURDATE(),INTERVAL)(9-IF(DAYOFWEEK(CURDATE())=1,8,DAYOFWEEK(CURDATE()))天)
和任命EndDateTimequery($getdataquery)
或触发\u错误(“

错误消息:($mysqli->错误,E_用户_错误); $datarowcnt=$getdataqueryresults->num\u行; 如果($datarowcnt>0){ 而($row=$getdataqueryresults->fetch_row()){ $rows[]=$row; } foreach($行作为$行){ $title=$row[0]; $type=$row[1]; $sdt=$row[2]; $edt=$row[3]; $purp=$row[4]; $c=7; 如果($type==1){ $typew=“强制性”; }否则{ $typew=“选修”; } $sparts=爆炸(“,$sdt”); $eparts=爆炸(“,$edt”); $tdiff=getTimeDiff($sparts[1],$eparts[1]); foreach($daysofweek作为$day){ 如果($title==$name){ 如果($day==date('w',strottime($sparts[0])){ 如果($sparts[0]=$eparts[0]){ 打印str_repeat($tab,9)。“$sparts[1]-$eparts[1]
($tdiff)-$typew\n”; $c--; }否则{ $s=strottime($sparts[0]); $e=strottime($eparts[0]); 对于($i=$s;$i 0){ $c--; 打印stru_repeat($tab,9)。“\n”; } } } } $rc++; }否则{ foreach($daysofweek作为$day){ 打印stru_repeat($tab,9)。“\n”; } } 打印stru_repeat($tab,9)。“$purp\n”; $purp=“”; 打印“\n”; }


新行从这里开始:

foreach ( $apptnamestop as $name) {
    print str_repeat($tab, 8) . "<tr>\n";
    print str_repeat($tab, 9) . "<td class=\"td1s\">$name</td>\n";
如果您希望在找不到匹配的数据库行时跳过表行的创建,请将行创建语句完全移动到内部循环中;这样,它将仅在找到数据库行时运行


作为最后一个注意事项,考虑实现一个视图模板系统;通过将逻辑代码与显示代码分离,您可以很容易地修改任何一个而不会破坏另一个代码。您的代码将来变得更容易阅读和修改。

谢谢乔治!!我最终重构了该代码的整体,但这是ANSWE。r这让我走上了正确的道路…我很感激!!
foreach ( $apptnamestop as $name) {
    print str_repeat($tab, 8) . "<tr>\n";
    print str_repeat($tab, 9) . "<td class=\"td1s\">$name</td>\n";
$rowCounter = 0;
foreach ($rows as $row) {
    if ($rowCounter > 0) {
        print "</tr>\n"; // Close the previous table row
        print str_repeat($tab, 8) . "<tr>\n";
        print str_repeat($tab, 9) . "<td class=\"td1s\">$name</td>\n";
        print str_repeat($tab, 9) . "<td class=\"td1s\">N/A</td>\n";
    }
    $rowCounter++;
    // Remainder of the loop code goes here
    ...
}