Динамически проверить расписание для столкновений - jquery / php - PullRequest
1 голос
/ 16 августа 2010

Я создаю расписание для музыкального фестиваля. Цель этого сайта - дать людям возможность выбрать действия, которые они хотят увидеть, и составить собственное расписание для мероприятия. На данный момент на сайте есть 2 таблицы:

  1. Полный список актов на фестиваль
  2. Личное расписание пользователя

Вот моя проблема. Каждый раз, когда действие добавляется из полного списка в личное расписание пользователя, я хочу функцию, которая будет перебирать каждую строку таблицы в расписании пользователя и выделять конфликт. Тогда это столкновение будет иметь другой формат (например, для аргументов, допустим, оно поменяет фон строки на красный, чтобы указать на это).

Как бы я это сделал?

Код таблицы:

<table id="fri_myTimes">
    <thead>
    <tr><th>Act</th>
    <th>Start Time</th>
    <th>End Time</th>
    <th>Duration</th>
    </tr></thead>
    <tbody>
<tr id="band-Young-Guns class="Main">
<td>Young Guns</td>
<td>12:00:00</td>
<td>12:30:00</td>
<td>30</td>
<td><div id="btn-Young-Guns" class="del">&nbsp;</div></td>
</tr>
<tr id="band-Frankie-And-The-Heartstrings" class="NME-/-Radio-1">
<td>Frankie And The Heartstrings</td>
<td>12:00:00</td>
<td>12:30:00</td>
<td>30</td>
<td>
<div id="btn-Frankie-And-The-Heartstrings" class="del">&nbsp;</div></td></tr>
</tbody>

1 Ответ

0 голосов
/ 17 августа 2010

Я бы использовал PHP, вставил новое время в таблицу, а затем выложил расписание для пользователя. Когда вы планируете расписание, выберите все выбранные пользователем действия и отобразите их в порядке времени

user
id | username | email | etc
33 | BillyBob | ...   |
... etc ...

timetable
id           | user_id | act_id
1            | 33      | 5
2            | 33      | 6
3            | 33      | 19

acts

id | start_time        | end_time         | title             | description
5  | 2010-11-20 11:00  | 2010-11-20 13:00 | Smashing Tomatoes |
6  | 2010-11-20 12:00  | 2010-11-20 14:00 | Stray Dogs        |
7  | 2010-11-21 11:00  | 2010-11-21 13:00 | Mister Googo      |
....
19 | 2010-11-21 12:00  | 2010-11-21 14:00 | Reeses Pieces     |

select t.*, a.title, UNIX_TIMESTAMP(a.start_time) as epoch_start, UNIX_TIMESTAMP(a.end_time) as epoch_end from timetable t join acts a on ( t.act_id = a.id ) where t.user_id = 33;

$timetable = array ();
while ( $rs = mysql_fetch_array ( $r, MYSQL_ASSOC ) )
{
    foreach ( $timetable as $tt )
    {
        if ( $rs['epoch_start'] > $tt['epoch_start'] and $rs['epoch_start'] < $rs['epoch_end'] )
        {
            $rs['conflict'] = $tt['id'];
        }
    }

    $timetable[$rs['id']] = $rs;
}


foreach ( $timetable as $toss => $tt )
{
   echo $tt['title'];
   if ( $tt['conflict'] )
   {
       $conflict = $timetable[$tt['conflict']];
       echo "note: this time conflicts with {$conflict['title']}";
   }
}

... Непроверенный код, но это суть. Я гарантирую, что там есть некоторые синтаксические и логические ошибки, но это концепция и один подход.

Я ушел от вещи time_id; это не очень помогло.

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