Php 根据特定ID按字母顺序选择用户

Php 根据特定ID按字母顺序选择用户,php,mysql,Php,Mysql,我熟悉分页,因为我可以根据页码选择一组用户,如下所示: // 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-

我熟悉分页,因为我可以根据页码选择一组用户,如下所示:

// 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的页码。对于exmaple,给定用户id 3和显示限制3,我想按字母顺序选择该用户以及前后的用户,总共三个用户。我希望这是有道理的


关于如何实现这一点,有什么建议吗?

下面是一种使用三个子查询和union all组合的方法:


下面是一种使用三个子查询并结合union all的方法:

这里有一个想法

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 |
+---+
这里有一个想法

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 |
+---+