MySQL下一行按顺序排列

时间:2011-09-23 14:24:10

标签: mysql sequence

我有这样的查询:

SELECT id, name, town, street, number, number_addition, telephone
FROM clients
WHERE ((postalcode >= 'AABB' AND postalcode <= 'AACC') OR (postalcode >= 'DDEE' AND postalcode <= 'DDFF'))
ORDER BY town ASC, street ASC, number ASC, number_addition ASC
LIMIT 1

这样我就能得到第一个客户。

然后我想得到下一个客户端(假设我知道我当前的客户端有ID 58,我希望按顺序获得下一个客户端 - 我将有一个标记为当前的客户端,我想得到下一个/我已经知道第一个客户的身份证了,能否请你给我一个如何实现这一目标的提示? (使用相同的顺序)

我发现了这个http://www.artfulsoftware.com/infotree/queries.php#75,但是当我需要按多列排序时,我不知道如何将这些示例转换为命令。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

您可以使用LIMIT X,Y这两个值,其中X是偏移量,Y是行数。有关信息,请参阅this

但是,每次查询一行时,都会生成列表顺序。有不同的方法可以做到这一点。

你可以做的就是获得该列表的很大一部分,也许对你来说是实用的(比如20,取决于它)。将结果保存在程序中的数组中,并通过它们进行迭代。如果您需要更多,只需使用偏移量再次查询。论坛在搜索的每个页面中只显示一定数量的帖子。

另一种方法是获取所需的所有客户端ID,将其保存在数组中,并一次查询每个客户端ID。

答案 1 :(得分:0)

SELECT 
  c1.id, c1.name, c1.town, c1.street, c1.number, c1.number_addition, c1.telephone
FROM clients c1
INNER JOIN clients c2
        ON (c1.town,c1.street,c1.number,c1.number_addition) > 
           (c2.town,c2.street,c2.number,c2.number_addition)
WHERE   ((c1.postalcode BETWEEN 'AABB' AND 'AACC') 
      OR (c1.postalcode BETWEEN 'DDEE' AND 'DDFF'))
   AND c2.id = '$previous_id'
ORDER BY c1.town, c1.street, c1.number, c1.number_addition
LIMIT 1 -- OFFSET 0

这里假设id是此表的主键 您需要将id添加到选择列表中,否则您将无法知道要id $previous_id放入下一个{{1}}。

相关问题