私はいくつかのユーザーによって使用される記事システムを持っています。記事には、自分のwhileループを実行する各記事の閲覧者のIDと照合される独自の権限があります。ユーザーが記事を閲覧できる場合は$printcount
をインクリメントして記事を制限し、$limit
になるとループを終了します。私はまた、名前、日付、日付の変更と提出によって並べ替えるオプションを並べ替えています。LIMITステートメントとソートなしのページ数
MySQLの制限機能を使用せずに次の/前のページボタンを利用する方法を教えてください。ここに私のコードのショートバージョンは、私だけID ASC
でソートされた場合、私は簡単にlast_id
としてIDを格納し、上の可能性が
<?php
$sort=$_GET['sort']; // date_added
$direction=$_GET['dir']; // ASC
$limit=$_GET['limit']; // 25
$query="SELECT * FROM `article` ORDER BY '$sort' '$direction'";
$result=mysql_query($query);
if(mysql_num_rows($result)==NULL) {
echo '<tr><td colspan="4">NO RECORDS FOUND</td></tr>';
}
$printcount=0;
while(($row=mysql_fetch_assoc($result))&&($printcount<$limit+1)) {
//if user is owner of article $readable=true;
//load permissions from permission column (comma separated integers) into array, if user's group ID is in that array $readable=true;
//if article "global_read" flag=1, $readable=true;
//if $printcount<$limit, and $readable echo the table row with data
//if $readable, $printcount++;
}
?>
です次のページではクエリにはさらにWHERE
が追加されますが、ソートオプションと方向オプションが異なるため、これははるかに複雑に思えます。`id`
> $ last_ID
私が対処する必要がある質問が、なぜ* *だと思います。なぜあなたはこれをやりたいのですか? –
'LIMIT'がなければ、データベースから同じデータを取得し続ける必要がないように、アプリケーションサーバがそれを処理するようにすることもできます。 –
私は、ユーザーのグループへのアクセスを制限する社内のWikiを構築しました。グループの一部であるユーザーIDを文字列でコンマで区切って格納するgroupsテーブルがあります。私のアプリケーションが潜在的に数千のエントリの後にクロールする可能性があるので、私は個々の記事ごとにエントリを持つ専用のパーミッションテーブルを持つことを望んでいませんでした。私はそれ以外の方法は、フラットファイルを使用する以外にどのようにアプローチするのかはわかりません。これは私の最初の試行であり、権限システムを組み込んでおり、現在データベース内の文字列にexplode/implodeを使用しています。 –