【问题标题】:PHP MySQL 7 Day , weekly, Mon-Fri Calendar with pagination?PHP MySQL 7天,每周,周一至周五日历与分页?
【发布时间】:2011-07-11 08:52:48
【问题描述】:

我正在尝试找出设计“7 天日历”的最佳方法,该日历将包含一个 HTML 表格,其中包含“姓名、星期日、星期一、星期二、星期三、星期四、星期五、星期六”列。 HTML 表格行将填充我数据库中的数据,即。姓名将有一个人的姓名,周日将显示该人周日需要做什么,即“刷牙”等。它与事件日历非常相似,除了我想要完成的不需要每小时视图,只是一个简单的 7 天,周日到周六的视图。

我的数据库目前由“名称、事件详细信息和事件日期”组成。

我的 HTML 表格列由“名称 - 星期日 - 星期一 - 星期二 - ...”列组成

我的逻辑:每次页面加载时,脚本都会查询数据库并查看是否有任何 EventDate 条目等于当前正在查看的一周中的 7 天之一。如果 EventDate 匹配,它将在与该日期的相应 HTML 表列匹配的行中列出自己。单击“上一周”或“下周”将更改为另一周并应重新启动脚本,但这次它将使用不同的日期列表进行检查。

有人愿意分享一些他们可以想出什么来实现这一目标的例子吗?

到目前为止,这是我想出的...问题在于,如果一个人下有多个事件,它会为每个事件创建一个新行,而我正在努力将其列出每个事件排成一行。

<table border='1'>
        <tr>
            <th>Name</th>   
            <th>Sunday</th>
            <th>Monday</th>
            <th>Tuesday</th>
            <th>Wednesday</th>
            <th>Thursday</th>
            <th>Friday</th>
            <th>Saturday</th>
        </tr>
    <?php 


    function getCurrentWeek()
    {
        $weekArray = array();

        // set the current date
        $date = date("m/d/Y"); //'03/08/2011';

        $ts = strtotime( $date );

        // calculate the number of days since Monday
        $dow = date('w', $ts);
        $offset = $dow - 0;
        if ($offset < 0) $offset = 6;

        // calculate timestamp for the Monday
        $ts = $ts - $offset*86400;

        // loop from Monday till Sunday
        for ($i=0; $i<7; $i++, $ts+=86400){
            $temp_date = date("Y-m-d", $ts);  // Reformat the dates to match the database
            array_push( $weekArray, $temp_date );
        }

        return($weekArray);

    }

    $currentWeek = getCurrentWeek();

    // Loop through the data array
    while($row = mysql_fetch_array($result)){

        $eventDate= $row['EventDate'];

        // Loop through the currentWeek array to match a date from the database from a date in the current week
        foreach ($currentWeek as $weekDay){

            // If there is a matching date...
            if ($eventDate == $weekDay) {
                echo "<tr><td>".$row['Name']."</td>";

                foreach ($currentWeek as $weekDay2){
                    if ($eventDate == $weekDay2) 
                        echo "<td>".$row['EventName']."</td>";
                    else
                        echo "<td></td>";
                }

                echo "</tr>";   

            }
        }
    }

    ?>

    </table>

【问题讨论】:

  • 你写过代码吗?既然有大量免费的 PHP 日历脚本,你为什么要从头开始编写这个?
  • 我已经包含了到目前为止的内容。另外,我不想只是复制和粘贴已经存在的内容,因为这对我来说不是什么学习经验。我只是从这个开始。
  • 无关:在编辑队列中,我遇到了一个您在分类中投票的问题。你在那里做了错误的选择。请:仔细研究分类帮助,避免将不属于那里的项目放入编辑队列。请理解您的投票有后果!我特指stackoverflow.com/review/triage/20908294。那应该因为不清楚/或没有 MCVE 而被关闭。只有 OP 才能合理地编辑它!如果您对我有其他问题或反馈,请随时给我留言。

标签: php javascript mysql ajax pagination


【解决方案1】:

要选择一周,您可以执行类似的操作

set @weekday:= dayofweek(@adate);  
set @StartOfWeek:= date_sub(@adate,INTERVAL @weekday DAY);  
set @EndOfWeel:= date_add(@adate,INTERVAL (7- @weekday) DAY);  

然后选择我要做的那一周

SELECT * FROM TableWithEvents  
WHERE TableWithEvents.EventDate 
      BETWEEN date_sub(@adate,interval @weekday day) 
      AND date_add(@date,INTERVAL (7-@weekday) DAY);

请注意,使用 @adate - @weekday 不会工作,你必须使用 date_sub/date_add 和愚蠢的间隔语法。 添加月份时它确实工作得很好,它可以正确地添加一个月中的天数或知道闰年的年份(但我离题了)。

对于分页,您可以使用上面的 SELECT 限制开始,结束;像这样:

SELECT * FROM sometable WHERE some_where_thingy LIMIT 0,20;

别忘了给EventDate 字段添加索引。
我建议将名为 id 的自动增量主键添加到包含事件的表中。
这样您就可以在其他表中唯一地链接到该特定事件,如下所示:

Table FavEvents:   
- id: integer (autoinc primary)  
- Event_id: integer (link to your event)  
- FanName: varchar(x) (name of user you loves event or what ever)

然后你可以像这样选择“bill”的最爱事件:

SELECT * FROM FavEvents  
INNER JOIN Events ON (FavEvents.Event_id = Event.id)  
WHERE FavEvents.FanName = "bill"

我从不使用 PHP,所以无法帮助你,祝你好运。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多