PHP MySQL 7天,每周,周一至周五日历与分页?

时间:2011-03-08 19:25:11

标签: php javascript mysql ajax pagination

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

我的数据库目前包含“Name,EventDetails和EventDate”。

我的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>

1 个答案:

答案 0 :(得分:2)

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

的操作
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 with limit start,end;像这样:

SELECT * FROM sometable WHERE some_where_thingy LIMIT 0,20;

O并且不要忘记在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”的fav事件:

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

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