0

ページにクエリがあり、while ループをエコーし​​てすべてのレコードを表示します。これを 25 に制限したいのですが、動的な次へ/前へのボタンも用意して、レコードをスキップできるようにします。似たようなものを見たことがありますが、それを理解できないか、見たチュートリアルを見つけることができません。私はPHPが初めてなので、どんな助けも素晴らしいでしょう。

<?PHP
$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."'");
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
while($row = mysql_fetch_row($result))
{
$id=$row[0];
echo ("<a href=profile.php?id=$id>".$row[1]." ".$row[2]."</a>");
}
?>
4

3 に答える 3

2

正しい解決策は、クエリを制限することです。これは次のように行うことができます (最後に「LIMIT 50」があることに注意してください)。

$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."' LIMIT 50");

次のようにカウントすることで、PHP の while ループを中断することもできます。

$count = 0;
while($row = mysql_fetch_row($result)){
  $id=$row[0];
  echo ("<a href=profile.php?id=$id>".$row[1]." ".$row[2]."</a>");
  $count++;
  if ($count >= 50){
    break;
  }
}

繰り返しになりますが、正しい解決策はクエリを制限することです。その理由は、PHP が 50 を超える結果をメモリにロードしないため、クエリが一致した場合、たとえばデータベース内の 100 万行のリソースを節約できるためです。

2 番目の解決策は、すべての結果をメモリにロードし、それらをループするときに、50 の後にループを停止します (ただし、一致したすべての結果は引き続きロードされますが、50 のみが使用され、その後はすべての結果が再度設定を解除します)。

于 2013-02-27T20:09:35.017 に答える
0

これは、SQL クエリを変更して行う必要があります。

$offset = (int)$_GET['offset'];
$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."' limit $offset, 25");
于 2013-02-27T20:02:06.430 に答える
0

私には醜い解決策しかありません...ただし、最初の方法は、結果をセッションvar(配列形式)に保存し、条件(if(!isset(session))クエリを実行)を入れ、次と前のボタンを2つに変換することです現在のページビューの値を持つ非表示の入力の近くのフォーム (または、視覚化された投稿の合計、例: 25 50 75...)。前へ/次へボタンをクリックすると、ページがリロードされ、セッション [変数名] [現在のインデックス] などが出力されます...それ以外の場合は、すべてのレコードを含む配列を返す jquery Ajax 呼び出しを実行できます。この方法で JavaScript/jquery を管理すると、ページを更新する必要がなくなります。
編集
SQL制限はより良いですが、視覚化されたアイテムの一部(25 50 75)と2つのボタンフォームを保存するセッションが必要です。このようにして、次/前をチェックし、セッションと設定後に25を加算または減算します新しい MySQL 制限 (セッションからセッション +25 まで)

于 2013-02-27T20:12:43.270 に答える