PHP MySQL 7 дней, еженедельно, пн-пт Календарь с нумерацией страниц? - PullRequest
2 голосов
/ 08 марта 2011

Я пытаюсь найти наилучший подход для разработки «календаря на 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 Ответ

2 голосов
/ 09 марта 2011

Чтобы выбрать неделю, вы можете сделать что-то вроде

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;

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" следующим образом:

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

Я никогда не использую PHP, поэтому не могу вам помочь, удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...