有了这个sql,我可以使用ID按字母顺序抓取下一个名字
SELECT id
FROM `names`
WHERE `name` > (SELECT `name` FROM `names` WHERE `id` = X)
ORDER BY `name` ASC, `id` ASC
但是假设我有这些我有这些记录
id | name
---------
12 | Alex
8 | Bert
13 | Bert
17 | Bert
4 | Chris
假设我有id 12作为参考,我得到结果
id | name
---------
8 | Bert
13 | Bert
17 | Bert
4 | Chris
但是如果我用8作为参考
id | name
---------
4 | Chris
第13和17章会被淘汰
3条答案
按热度按时间yuvru6vn1#
这看起来很明显,但是如果你想按2个字段排序,比如名字和姓氏,那么你需要连接(
CONCAT
/CONCAT_WS
)名字和姓氏字段,以便找到上一个或下一个结果。如果你有相同的名字,那么你可能会发现自己从一个名字循环到另一个,然后再回来,为了防止这种情况,将行的ID连接到连接的名字和姓氏的结尾。这将比测试更好,如果id大于当前id(OR n.names = q.name AND n.id > q.id)
,如果名称没有按字母顺序插入,那么你将错过结果的部分(不是浏览到下一个/上一个结果时想要的)。希望这对某人有帮助。gorkyyrv2#
尝试这样的条件:
5w9g7ksd3#
这是因为您正在使用大于运算符比较 names,这将排除任何等于的名称。如果你想继续尊重id:
在这里,我们使用内部查询不仅返回名称,还返回相应的id。然后,我们可以使用id作为相同名称的情况下的平局决胜局。