php - 修改 PHP/Mysql 时间表

标签 php mysql timetable

我目前有这段代码:

         $rawsql2 = "SELECT 
            *
            FROM 
                _erc_foffices n 
            INNER JOIN 
                _erc_openings o ON n.id = o.branch_id 
            INNER JOIN 
                _erc_openings_times t ON o.id = t.opening_id
            WHERE 
            (
                n.id = %d
            );";

            $sql2 = sprintf($rawsql2, mysql_real_escape_string($id));

            $result2 = mysql_query($sql2);

            /*These if & while statements decide whether or not the information should be displayed. If no results are returned from the query above then an alternative message is shown.*/

    if(mysql_num_rows($result2) > 0) {

            $count=0;
            $day = 1;
            $timestamp = time();
            $dotw = date('w', $timestamp);
            $dotw = $dotw*2+1;

    echo "<div class='timetable'><p>";

while ($row = mysql_fetch_array($result2, MYSQL_ASSOC)) {

    if ($day=='1') { if ($dotw == '1') {echo "<font color='$timetable_colour'>";} echo "<b>Sun - </b>";} 
    else if ($day=='3') { if ($dotw == '3') {echo "<font color='$timetable_colour'>";} echo "<b>Mon - </b>"; } 
    else if ($day=='5') { if ($dotw == '5') {echo "<font color='$timetable_colour'>";} echo "<b>Tue - </b>"; } 
    else if ($day=='7') { if ($dotw == '7') {echo "<font color='$timetable_colour'>";} echo "<b>Wed - </b>"; } 
    else if ($day=='9') { if ($dotw == '9') {echo "<font color='$timetable_colour'>";} echo "<b>Thu - </b>"; } 
    else if ($day=='11') { if ($dotw == '11') {echo "<font color='$timetable_colour'>"; } echo "<b>Fri - </b>"; } 
    else if ($day=='13') { if ($dotw == '13') {echo "<font color='$timetable_colour'>";} echo "<b>Sat - </b>"; } else { echo "";}

        if ($row["open"] == 0 && $row["close"] == 0) {

             if ($day % 2 == 1) {

                    echo "closed<br/></font>";

             }

        }

        else{

               echo "" . substr($row["open"], 0, -3) . "-" . substr($row["close"], 0, -3) . " &nbsp;&nbsp; ";

        if ($count % 2 !=0 ){ echo  "</font><br/>"; } }

               $count++;
               $day++;


                }
            } else {
                    echo "Error";
            }

输出这样的时间表:

Sun - closed
Mon - 08:30-12:30    13:30-16:30   
Tue - 08:30-12:30    13:30-23:59   
Wed - 08:30-12:30    12:30-12:30   
Thu - 08:30-12:30    13:30-16:30   
Fri - 08:30-12:30    13:30-16:30   
Sat - closed

我现在遇到的问题是一些大使馆一天只有一个开放时间(例如星期一 - 0900 - 17:00)。使用我目前拥有的系统,我不能只插入一次,因为它会在星期一列中显示 0900 - 1700,然后是星期二的下一个值,但都在同一行中。

有人能告诉我如何更改我的代码以识别那天只有一个时间,并在正确的行上插入星期二时间等吗?对不起,如果我没有很好地解释它,它很困惑!

感谢您的帮助

编辑:

Mysql表布局:

id  opening_id  open    close
    1   3102    00:00:00    00:00:00
    2   3102    00:00:00    00:00:00
    3   3103    08:30:00    12:30:00
    4   3103    13:30:00    16:30:00
    5   3104    08:30:00    12:30:00
    6   3104    13:30:00    23:59:00
    7   3105    08:30:00    12:30:00
    8   3106    09:30:00    12:30:00
    9   3106    13:30:00    16:30:00
    10  3107    08:30:00    12:30:00
    11  3107    13:30:00    16:30:00
    12  3108    00:00:00    00:00:00
    13  3108    00:00:00    00:00:00

_erc_openings table

id  branch_id   dotw
1   1             1
2   1             2
3   1             3
4   1             4
5   1             5
6   1             6
7   1             7

Sun - closed
Mon - 08:30-12:30    13:30-16:30   
Tue - 08:30-12:30    13:30-23:59   
Wed - 08:30-12:30    09:30-12:30   
Thu - 13:30-16:30    08:30-12:30   
Fri - 13:30-16:30    Sat - closed

最佳答案

您的 PHP/MySQL 似乎存在根本性缺陷。无论您用 $day 和 $dotw 做什么,都不可能是正确的。您是否正在做一些事情来将星期几与数据库中的条目联系起来?如果是这样,您的代码不会显示它。当前,您的代码仅在您运行代码时查看一周中的当天。我看到了您所描述的问题,但为了解决该问题,您需要一种方法来指示哪些时间与哪些日期相关联。这是您要通过 opening_id 实现的目标吗?您从不在代码中引用此表值

编辑 这仍然感觉不正确,因为您只是假设行以正确的顺序传递。正确的方法是在表中添加与正在处理的星期几相对应的行,这样您就可以确保您的值是正确的,但快速解决方法是使用您打开的安全位,然后关闭,以及一个用于跟踪新行时的变量。如果这没有意义,请告诉我,我会尽力澄清

$saftey = 0;
$lastID = "";
while ($row = mysql_fetch_array($result2, MYSQL_ASSOC)) {
if($lastID != $row["opening_id"])
{
    //New Row
    $lastID = $row["opening_id"];
    if($saftey = 0)
    {
        //Everything's fine, do all your processing

        //once that's done
        $saftey = 1;
    }
    else
    {
        //There was a first time, but no second time.  Close up here with <br>
    }
}
else
{
    //Not a new row, since this is the 2nd value, process normally and just in case
    $saftey = 0;
}

关于php - 修改 PHP/Mysql 时间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727184/

相关文章:

使用 "Undefined variable:post"时出现 Php 错误 "get_post_thumbnail_id($post->ID)"

mysql - 使用 Laravel 5.5 在实时数据库上调用存储过程会引发内存错误

C# Entity Framework : Keyword not supported: 'port'

mysql - 关于如何使用 mysql 和数据库池设置 tomcat 的好教程是什么?

airflow 2.2 时间表,总是有错误 : timetable not registered

t-sql - 如何使用重叠的开始时间和停止时间对 15 分钟间隔内发生的事件时间求和 (SQL)(t-SQL)

php - json函数将数据保存到数据库时出错

php - 通过 FTP 解析大型 XML 文件

php - RESTful API 错误处理

java - 项目调度基本示例: chromosome for the Genetic Algorithm