1

このようなテーブルがあります

id    |   name      |  image     |    ordering
------+-------------+------------+--------------
1     |   name 1    |  one.jpg   |      5
------+-------------+------------+--------------
2     |   name 2    |  two.jpg   |      2
------+-------------+------------+--------------
3     |   name 3    |  thr.jpg   |      3
------+-------------+------------+--------------
4     |   name 4    |  for.jpg   |      7
------+-------------+------------+--------------
5     |   name 5    |  fiv.jpg   |      1
------+-------------+------------+--------------
6     |   name 6    |  six.jpg   |      9
------+-------------+------------+--------------

注文に従ってページに最初の画像を表示するという私の要件。次のクエリは私にとってはうまくいきます

SELECT * FROM images ORDER BY ordering ASC LIMIT 0,1 - row with id 5 will return

次に、下部に「前へ」と「次へ」の 2 つのリンクを表示する必要があります (これは最初のページなので、「前へ」を表示する必要はありません)。

わかりました..「次へ」を押すと、次のページを表示する必要があります(つまり、表によると、ID 2 の行)。そのページでは、最初の結果につながる「前」を表示する必要があります。そのページの「次へ」は、ID 3 の行につながる必要があります

私が試してみました

select * from images where id < $local_id order by id desc limit 1
 select * from images where id > $local_id order by id asc limit 1

しかし、それは順序付けられているため、機能しません...

誰でも私とアイデアを共有できますか? 前もって感謝します

4

4 に答える 4

3

MySQLLIMIT X, Yでは取得したい範囲です。ここで、X は開始行 (0 は最初の行) で、Y は返す行数です。

必要なものを実現するには、各ページにページ番号を使用し、それらを使用して X 値を計算する必要があります。各ページに 1 つの画像のみが必要なため、Y は常に 1 になります。

このようなものから始めることができます:

<?php

$page = (isset($_GET['page'])) ? $_GET['page'] : 1;

$startPoint = $page - 1;

$query = "SELECT * FROM images ORDER BY ordering ASC LIMIT $startPoint,1";

$rowCount = 0; // replace this with a count of all your rows/images

次に、リンクは次のようになります

<a href="index.php?page=1">First</a>
<a href="index.php?page=<?php echo $page - 1?>">Prev</a>
<a href="index.php?page=<?php echo $page + 1?>">Next</a>
<a href="index.php?page=<?php echo $rowCount;?>Last</a>
于 2013-05-21T10:20:53.417 に答える
1

良くない +1 / -1 が悪いです。ID (ページ) が存在しないことを防ぎます。前の ID で SQL を使用します。

例 ur メインページ ID 3 と ID 4 が存在しません... 起こります:

次:

select * from images where id = (select min(id) from images where id > 4)

前:

select * from images where id = (select max(id) from images where id < 4)
于 2015-05-06T14:48:01.560 に答える