2010-08-16 5 views
1

나는 음악 축제를위한 시간표 사이트를 만들고 있습니다. 이 사이트의 목적은 사람들이 자신이보고 싶어하는 작업을 선택하고 이벤트에 대한 자신의 개인 시간표를 컴파일하는 것입니다. 축제 동적으로 충돌 시간표 확인 - jquery/ph

  • 사용자의 개인 시간표 여기
  • 내 문제에서의 행위의

    1. 전체 목록 : 순간이 사이트는이 개 테이블을 가지고있다. 전체 목록에서 사용자의 개인 시간표에 행위가 추가 될 때마다 나는 사용자의 시간표의 모든 테이블 행을 반복하고 충돌을 강조 표시하는 기능을 원합니다. 이 충돌은 다른 형식을 갖게됩니다 (인수를 위해 행의 배경을 충돌로 나타낼 수 있음).

      어떻게하면됩니까?

      표 코드 :

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

    +0

    정규화하기 위해 세 번째 테이블을 추가하는 것은 어떻습니까? 신분증과 시간을 매 15 분마다 (8:00, 8:15, 8:30 등)하고 각 행동에 시간 ID를 부여한 다음 두 가지가 일치하면 충돌이 발생합니다. 행동 표에서 기간 필드를 추가하거나 시간을 "시작"(시작 시간의 ID) 및 "종료"(종료 시간의 ID)로 설정하고 겹치는 부분이 있으면 충돌이 발생합니다. – Hans

    +0

    나는 이해한다고 생각한다. 어떻게하면 전체 목록에서 사용자 목록에 추가 할 때마다이 함수를 실행할 수 있습니까? 또한 이것은 jq 코드 또는 PHP 코드에 있습니까? – jp577

    답변

    0

    나는, 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에서 벗어났다. 그것은 그다지 큰 도움이되지 못했습니다.