2015-01-09 5 views
0

Я пытаюсь получить большое количество данных и распечатать их в таблице. В одной таблице у меня около 5000 записей, которые мне нужно распечатать в таблице, а в одном я имею около 10000 записей. Я использую DataTable с разбивкой по страницам, и время печати записей в таблице очень медленное. Я также пытался создать хранимую процедуру, и время было таким же.Извлечь большое количество записей

Любая помощь или совет очень ценится.

Это код, я использую

$sql= "SELECT a.Id, a.Datum, a.Materijal, a.VrstaIzlaza, a.BrojIzlaza, a.Pocetno, a.Krajnje, a.Promet, b.OdjelNaziv, c.LokacNaziv 
FROM jos_ib_promet_reprm_2014 a 
LEFT JOIN odjeli b ON a.Odjel=b.OdjelId 
LEFT JOIN sredstva c ON a.Poslovnica=c.LokacijaId order by a.Id desc"; 

$q = $conn->query($sql); 

<table id="example1" class="table table-bordered table-striped"> 
    <thead> 
     <tr> 
      <th>Id</th> 
      <th>Materijal</th> 
      <th>Izlaz</th> 
      <th>Br. dokumenta </th> 
      <th>Datum</th> 
      <th>Pocetno stanje</th> 
      <th>Krajnje stanje</th> 
      <th>Promet</th> 
      <th>Odjel</th> 
      <th>Poslovnica</th> 
     </tr> 
    </thead> 
    <tbody> 
    <?php while ($r = $q->fetch()): ?> 
    <tr> 
     <td><?=$r['Id'] ?></a> </td> 
     <td>R-<?=$r['Materijal'] ?></td> 
     <td><?=$r['VrstaIzlaza'] ?></td> 
     <td><?=$r['BrojIzlaza']?></td> 
     <td><?=$r['Datum'] ?></td> 
     <td><?=$r['Pocetno'] ?></td> 
     <td><?=$r['Krajnje'] ?></td> 
     <td><?=$r['Promet'] ?></td> 
     <td><?=$r['OdjelNaziv'] ?></td> 
     <td><?=$r['LokacNaziv'] ?></td> 
    </tr> 
    </tbody> 
</table> 
+1

Используйте ленивую технику загрузки, то есть вы получаете данные AJAX только тогда, когда вам нужно их отображать. Отнимающая много времени часть связана с вашими длинными запросами MYSQL. – Mysteryos

+1

Я не вижу никакой логики «разбиения на страницы» в вашем коде ... Вы, вероятно, печатаете полную таблицу результатов ... :-( – MarcoS

+2

используйте 'LIMIT' в своем SQL-запросе, чтобы выбрать не более 50, может быть, 100 записывает и реализует систему разбиения на страницы. Чтение нескольких тысяч одновременно - это плохая идея. – Forien

ответ

0

Я думаю, вы должны использовать некоторые Ajax как помощь. Вы распечатываете примерно 20 записей на странице, и по мере того, как вы идите на странице, вы отправляете другой запрос на сервер для загрузки еще 20 записей. Это очень эффективно, когда вам нужно иметь дело с большим количеством записей.

-1

В mysqli :: запросе есть необязательный флаг для такой проблемы. Он называется MYSQLI_STORE_RESULT. Таким образом, ваш код должен выглядеть как пара.

$q = $conn->query($sql,MYSQLI_STORE_RESULT); 
Смежные вопросы