0

個人サイトを作っています。ブログにはまってます。私はそれを持っているので、ページごとに5つ表示されます.MySQLテーブルのIDに切れ目がない場合は問題ありません.
しかし、私にはブログを削除する機能があり、ループには欠落している ID が含まれており、何も表示されないため、すべてが台無しになり、ページごとに 3 つまたは 4 つしかありません。 ここに画像の説明を入力

(id=10のブログは削除されました)

すべてのコードを表示するつもりはありませんが、一部を示します。

$i = $blog_count-(($currentpage*$maxperpage)-$maxperpage);
while ($i >$blog_count-(($currentpage*$maxperpage)-$maxperpage)-$maxperpage){
//render the blogs
$i--;
}

$blog_count は、テーブル内の行数と同じです。私がいじっていた別の変数があります。それは $maxid です。これは単純に最大の ID 番号です。

どんな助けでも大歓迎です。これを行う方法を知っておくべきだと感じていますが、困惑しています。

編集:コードを次のように変更しました

$start = $currentpage*$maxperpage-$maxperpage;
$query = "SELECT * FROM blogs ORDER BY id DESC LIMIT $start,$maxperpage";
$result=mysql_query($query) or die(mysql_error());
while ($blog = mysql_fetch_array($result)) 

そして、それは機能します。

4

3 に答える 3

1

あなたの問題は、データベースを適切に使用していないことにあるようです。

データベースが必要に応じてフィルタリングおよびソートされた行のコレクションを返すようにする必要があります。典型的なブログ シナリオ (記事が非アクティブ/まだ公開されていない場合) では、日付でソートされたアクティブな記事のコレクションを返すようにデータベースに要求します。基本的な SQL を読んで、適切な ORM (クエリの実行を容易にし、生の SQL から分離するデータベース抽象化レイヤー) を使用してください。

すでに述べたように、ページネーションを行いたい場合は、LIMIT を使用して行のサブセットを取得できます。

于 2012-07-21T23:11:28.690 に答える
0

他の人が述べたように、ブログ投稿の任意の id フィールドに依存するべきではありません。データベースから投稿を並べ替えてプルし、ループで出力します。開始するのに役立つコード例を次に示します。

$results = $connection->query("SELECT * FROM Posts LIMIT 5, 5 ORDER BY id DESC");
while ($row = $result->fetch_assoc())
{
//Pull data from the row and display it
}

したがって、このコードは、どの投稿が削除されたかに関係なく、データベースから 6 番目から 10 番目の投稿を取得します。LIMIT の最初のパラメーターはスキップする行数 (最初のページは 0、2 番目のページは 5 など) で、2 番目のパラメーターは結果の最大数です (これを常に 5 にします)。

于 2012-07-21T23:21:39.607 に答える
0

OK、私が提案する2つのこと...

返される結果の量を制限する MySQL limit 句を使用します。

いえ

SELECT * FROM `table1` LIMIT 10;

または、行が「削除」されているかどうかを判断するような別のフィールドを使用deletedして、データベースにはまだ存在しますが、アクティブではありません。

于 2012-07-21T23:04:30.053 に答える