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(灯箱)知道要开始的照片以及下一张和之前的照片.因为画廊是循环的.感谢帮助.
您可以使用此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 < 3和id.第一个表达式id < 3是BOOLEAN类型,将TRUE用于前2个元素和FALSE其他元素.按此标准排序将确保前2个元素将是输出的最后2个元素,因为FALSE< TRUE.第二种分类标准id正常排序.
换句话说,1,2,3,4,5,6,7的输入序列将在输出时循环到3,4,5,6,7,1,2.
更新2:如果您只有一个主列,请使用此示例获取您的确切输出:SQLFiddle.