PostgreSQL中的循环ORDER BY排序

Pan*_*ack 0 php sql postgresql

我在尝试在PostgreSQL中排序时遇到了一些问题.我想选择信息,但按照传递给查询的特定值进行排序,然后从那里开始.例如,说我有以下数字.

31, 30, 29, 28, 27, 26, 25  
Run Code Online (Sandbox Code Playgroud)

我想能够说排序,28结果将是,

28, 27, 26, 25, 31, 30, 29

我似乎无法实现这一点我试图在数组中用PHP对它进行排序而无法弄明白所以我采用了DB的方式.这是我试过的查询.

<?php
    $sql_query="SELECT * FROM album_photos WHERE 
    alb_id=".$alb_id." ORDER BY CASE WHEN pho_id='".$pid."' 
    then 1 ELSE 2 END, pho_id DESC"; 
Run Code Online (Sandbox Code Playgroud)

我需要这个的原因是因为我需要按照被点击的ID进行排序,以便fancybox(灯箱)知道要开始的照片以及下一张和之前的照片.因为画廊是循环的.感谢帮助.

mvp*_*mvp 9

您可以使用此SQL方法.假设您的数字存储在表中(id, code),其中id是serial(序号1,2,...),并且code是示例中的2位数代码,您可以使用此SQL获得所需的排序:

SELECT code
FROM mytable
ORDER BY id < 3, id
Run Code Online (Sandbox Code Playgroud)

其中3是表中开始排序的示例.这是SQLFiddle演示.

更新:解释为什么这样工作:ORDER BY子句有2个元素: id < 3id.第一个表达式id < 3BOOLEAN类型,将TRUE用于前2个元素和FALSE其他元素.按此标准排序将确保前2个元素将是输出的最后2个元素,因为FALSE< TRUE.第二种分类标准id正常排序.

换句话说,1,2,3,4,5,6,7的输入序列将在输出时循环到3,4,5,6,7,1,2.

更新2:如果您只有一个主列,请使用此示例获取您的确切输出:SQLFiddle.