これを行う方法はいくつかあります。
最初はmysqlオフセットです(すべての行を取得するのではなく、必要な部分を取得します(そこに10000行ある可能性があります-一度にすべてが問題になります))。
最初の例は、かなりの数のレコードがある場合、または大きなレコード グループを処理できるため、将来に備えたい場合に使用できます。
2 番目の例は、レコードのグループが小さい場合、またはデータベースのプリスクリプト実行の一種のキャッシュを行う場合に使用できます。
例 #1:
MySql -
SELECT col1, col2, col3, col4 FROM MyTable LIMIT 4 OFFSET 0
php -
session_start();
$position = isset($_SESSION['display_position']) ? $_SESSION['display_position'] : 0;
$limit = 4;
if(empty($position))
$_SESSION['display_position'] = 0;
$sql = 'SELECT col1, col2, col3, col4 FROM MyTable LIMIT '.$limit.' OFFSET '.$position;
$result = mysql_query($sql);
// We don't want to fetch non existen resource
if($result)
{
while($rows = mysql_fetch_array($result))
{
echo $rows;
}
}
else
{
echo 'No more records';
exit;
}
// Update session for next run
$_SESSION['display_position'] = $position + $limit;
その他は、たとえば、配列のループと $_SESSION での位置の格納です。
例 #2:
Mysql-
SELECT col1, col2, col3, col4 FROM MyTable
php -
session_start();
$records = array('row1', 'row2', 'row3', 'row4', 'row5', 'row6', 'row7', 'row8', 'row9', 'row10');
$position = isset($_SESSION['display_position']) ? $_SESSION['display_position'] : 0;
$limit = 4;
if(empty($position))
$_SESSION['display_position'] = 0;
if(count($records) < $position)
{
echo 'No more records';
exit;
}
for($i = $position; $i < $position + $limit; $i++)
{
// Display rows
if(isset($records[$i]))
echo $records[$i];
}
// Update session for next run
$_SESSION['display_position'] = $position + $limit;
注:$limit
必要に応じて変数を調整してください。
あなたの特定のユースケース(更新済み):
session_start();
$records = array(
array(
'col1' => 'col1valuerow1',
'col2' => 'col2valuerow1',
'col3' => 'col3valuerow1',
'col4' => 'col4valuerow1'
),
array(
'col1' => 'col1valuerow2',
'col2' => 'col2valuerow2',
'col3' => 'col3valuerow2',
'col4' => 'col4valuerow2'
),
array(
'col1' => 'col1valuerow3',
'col2' => 'col2valuerow3',
'col3' => 'col3valuerow3',
'col4' => 'col4valuerow3'
),
array(
'col1' => 'col1valuerow4',
'col2' => 'col2valuerow4',
'col3' => 'col3valuerow4',
'col4' => 'col4valuerow4'
),
array(
'col1' => 'col1valuerow5',
'col2' => 'col2valuerow5',
'col3' => 'col3valuerow5',
'col4' => 'col4valuerow5'
),
array(
'col1' => 'col1valuerow6',
'col2' => 'col2valuerow6',
'col3' => 'col3valuerow6',
'col4' => 'col4valuerow6'
),
array(
'col1' => 'col1valuerow7',
'col2' => 'col2valuerow7',
'col3' => 'col3valuerow7',
'col4' => 'col4valuerow7'
),
array(
'col1' => 'col1valuerow8',
'col2' => 'col2valuerow8',
'col3' => 'col3valuerow8',
'col4' => 'col4valuerow8'
),
array(
'col1' => 'col1valuerow9',
'col2' => 'col2valuerow9',
'col3' => 'col3valuerow9',
'col4' => 'col4valuerow9'
),
array(
'col1' => 'col1valuerow10',
'col2' => 'col2valuerow10',
'col3' => 'col3valuerow10',
'col4' => 'col4valuerow10'
)
);
$position = isset($_SESSION['display_position']) ? $_SESSION['display_position'] : 0;
$limit = 1;
if(empty($position))
$_SESSION['display_position'] = 0;
if(count($records) < $position)
{
echo 'No more records';
exit;
}
for($i = $position; $i < $position + $limit; $i++)
{
// Display rows
if(isset($records[$i])){
echo $records[$i]['col1'] . '<br/>';
echo $records[$i]['col2'] . '<br/>';
echo $records[$i]['col3'] . '<br/>';
echo $records[$i]['col4'] . '<br/>';
}
}
// Update session for next run
$_SESSION['display_position'] = $position + $limit;