0

次のように、ページ番号に基づいてユーザーのグループを選択できるという点で、ページネーションに精通しています。

// setup pagination
$page = 1;
$display = 5;
$start = $display * $page - $display;

$sql = "SELECT * FROM users WHERE valid = 'Y' ORDER BY :username ASC LIMIT :start, :display";
$sth = $this->db->prepare($sql);
$sth->bindValue(':username', $username, PDO::PARAM_STR);
$sth->bindValue(':start', $start, PDO::PARAM_INT);
$sth->bindValue(':display', $display, PDO::PARAM_INT);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);

私が理解しようとしているのは、ユーザーIDを持っているページ番号の代わりに似たようなことをする方法です。たとえば、ユーザーIDが「3」で表示制限が「3」の場合、そのユーザーとその前後のユーザーをアルファベット順に(合計3人)選択したい。それが理にかなっていることを願っています..

これにアプローチする方法についてのアドバイスはありますか?

4

2 に答える 2

3

以下は、3 つのサブクエリを組み合わせて使用​​するアプローチですunion all

(select *
 from users
 where valid = 'Y' and username < :username
 order by username desc
 limit 1
)
union all
(select *
 from users
 where valid = 'Y' and username = :username
 order by username desc
 limit 1
)
union all
(select *
 from users
 where valid = 'Y' and username > :username
 order by username
 limit 1
)
于 2013-05-15T23:15:28.737 に答える
2

ここに1つのアイデアがあります...

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

(SELECT * FROM ints WHERE i >= 3 ORDER BY i LIMIT 2) 
UNION 
(SELECT * FROM ints WHERE i < 3 ORDER BY i DESC LIMIT 1) 
ORDER BY i;
+---+
| i |
+---+
| 2 |
| 3 |
| 4 |
+---+
于 2013-05-15T23:15:50.410 に答える