2015-05-06 3 views
3

У меня есть таблица базы данных с id, date, time, cabinet столбцы.Таблица очередей с использованием PHP/MySQL

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

time 8,9,10,11,12,13,14,15,16 
    102 -- - + - - + - - 
    103 -+ - - - - + - - 

если время занят будет +, если бесплатно -. Итак, я пытаюсь сделать это с помощью этого кода.

Я должен изменить петли .. некоторые идеи? Спасибо!

Также у меня есть столовые приборы с id, cabinetNumber, title столбцы. Мне нужно изменить мой запрос mysql. Должна быть возможность изменить дату (usege datepicker и Ajax) и изменить значения строк таблицы.

$q = $_GET['date']; 
    $query = mysql_query("SELECT date,cabinet, 
     SUM(IF(ROUND(`time`)=8,1,0)) as h8, 
     SUM(IF(ROUND(`time`)=9,1,0)) as h9, 
     SUM(IF(ROUND(`time`)=10,1,0)) as h10, 
     SUM(IF(ROUND(`time`)=11,1,0)) as h11, 
     SUM(IF(ROUND(`time`)=12,1,0)) as h12, 
     SUM(IF(ROUND(`time`)=13,1,0)) as h13, 
     SUM(IF(ROUND(`time`)=14,1,0)) as h14, 
     SUM(IF(ROUND(`time`)=15,1,0)) as h15 
    FROM `schedule` WHERE date = '".$q."' 
    GROUP BY cabinet") or die(mysql_error()); 
    ?> 

<table class="table table-hover"> 
    <tr class=".info"><td>Cab</td><td >8:00</td><td >9:00</td><td >10:00</td><td >11:00</td><td >12:00</td><td >13:00</td><td >14:00</td><td >15:00</td></tr> 
    <!-- --> 
    <?php while($data=mysql_fetch_array($query)) :?> 
     <tr> 
      <?php $cabinet = $data['cabinet']; ?> 
      <td><?=$cabinet ?></td> 
      <?php for($j=8; $j<=15; $j++) : ?> 
       <?php 
       $busy = $data['h'.$j]; 
       ?> 
       <?php if($busy>0 && $data['date']===$q): ?> 
        <td class="busy"><?=$busy?></td> 
       <?php else: ?> 
        <td class="free"><?=$cabinet; ?> 
         <form action="1.php" method="post"> 
          <input type="hidden" name="time" value="<?= $j;?>" /><?=$data['date']?> 
          <input type="hidden" name="cabinet" value="<?= $cabinet;?>" /> 
          <input type="submit" style="free" value="" name="sub"/> 
         </form> 
        </td> 
       <?php endif?> 

      <?php endfor ?> 
     </tr> 
    <?php endwhile ?> 
</table> 

$(function() { 
     $("#datepicker").datepicker({ dateFormat: 'yy-mm-dd' }); 
    }); 
    $(".date").on('change', function(){ 
     var date = $('#datepicker').val(); 
     console.log(date); 
     $.ajax({ 
      type:'get', 
      url:'table.php', 
      data : { 
       'date' : date 
      }, 
      success: function(data) { 
       $('#result').html(data); 
      } 
     }); 
    }); 
+1

Пожалуйста, [прекратить использование '' mysql_ * функции] (http://stackoverflow.com/вопросы/12859942/почему-не должно-и-использование-MySQL-функции-в-PHP). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и подумайте об использовании [PDO] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

1

Вам не нужно цикл, $i Я думаю

<table class="table table-hover"> 
    <tr class=".info"><td >8:00</td><td >9:00</td><td >10:00</td><td >11:00</td><td >12:00</td><td >13:00</td><td >14:00</td><td >15:00</td></tr> 
    <!-- --> 
    <?php while($data=mysql_fetch_array($query)) :?> 
    <tr> 
     <?php for($j=8; $j<=15; $j++) : ?> 
      <?php $time = $data['time']; 
       $time = round($time); 
       $cabinet = $data['cabinet']; 
      ?> 
      <?php if($j == $time): ?> 
       <td class="busy"></td> 
      <?php else: ?> 
      <td class="free"> 
       <form action="1.php" method="post"><?=$cabinet; ?> 
        <input type="hidden" name="time" value="<?= $j; ?>" /> 
        <input type="submit" style="free" value="" name="sub"/> 
       </form> 
      </td> 
      <?php endif?> 
     <?php endfor ?> 
    </tr> 
<?php endwhile ?> 

</table> 

UPDATE Изменить запрос к этому:

http://sqlfiddle.com/#!9/84bae/3

SELECT cab, 
    SUM(IF(ROUND(`time`)=8,1,0)) as h8, 
    SUM(IF(ROUND(`time`)=9,1,0)) as h9, 
    SUM(IF(ROUND(`time`)=10,1,0)) as h10, 
    SUM(IF(ROUND(`time`)=11,1,0)) as h11, 
    SUM(IF(ROUND(`time`)=12,1,0)) as h12, 
    SUM(IF(ROUND(`time`)=13,1,0)) as h13, 
    SUM(IF(ROUND(`time`)=14,1,0)) as h14, 
    SUM(IF(ROUND(`time`)=15,1,0)) as h15 
FROM `dayshedule` 
GROUP BY cab 

и изменить PHP затем код:

<?php while($data=mysql_fetch_array($query)) :?> 
    <tr> 
     <?php for($j=8; $j<=15; $j++) : ?> 
      <?php 
       $busy = $data['h'.$j]; 
       $cabinet = $data['cab']; 
      ?> 
      <?php if($busy>0): ?> 
       <td class="busy"></td> 
      <?php else: ?> 
      <td class="free"> 
       <form action="1.php" method="post"><?=$cabinet; ?> 
        <input type="hidden" name="time" value="<?= $j; ?>" /> 
        <input type="submit" style="free" value="" name="sub"/> 
       </form> 
      </td> 
      <?php endif?> 
     <?php endfor ?> 
    </tr> 
<?php endwhile ?> 

UPDATE Обновить код здесь:

<tr class=".info"><td>Cab #</td><td >8:00</td>... 

и здесь:

<tr> 
    <?php $cabinet = $data['cab']; ?> 
    <td><?=$cabinet ?></td> 
    <?php for($j=8; $j<=15; $j++) : ?> 
     <?php 
      $busy = $data['h'.$j]; 

     ?> 
+0

'CREATE TABLE IF NOT EXISTS график ( идентификатор Int (5) NOT NULL, дата дата NOT NULL, время времени (6) NOT NULL, шкаф VARCHAR (25) NOT NULL ) ENGINE = InnoDB AUTO_INCREMENT = 13 DEFAULT CHARSET = latin1; ' – ladomiryak

+0

не имеет значения – ladomiryak

+0

действительно? но имеет ли значение, что я трачу свое время на отладку кода? может быть, вы можете попытаться помочь? – Alex

Смежные вопросы