用一个选项排序到列表顶部

时间:2020-03-05 18:58:48  来源:igfitidea点击:

我有一个PHP应用程序,向用户显示选项列表。该列表是通过针对SQL 2000的简单查询生成的。我想做的是在列表顶部具有一个特定选项,然后将其余选项按字母顺序排序。

例如,以下是按字母顺序排序的选项:

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto

我希望列表更像这样:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto

有没有一种方法可以使用单个查询来做到这一点?还是我坚持两次运行查询并添加结果?

解决方案

回答

SELECT name FROM options ORDER BY name = "Montreal", name;

注意:这适用于MySQL,而不适用于要求的OP的SQL 2000。

回答

create table Places (
    add Name varchar(30),
    add Priority bit
)

select   Name
from     Places
order by Priority desc,
         Name

回答

SELECT name
FROM locations
ORDER BY
    CASE
        WHEN name = 'Montreal' 
        THEN 0
        ELSE 1
    END, name

回答

我在建立了很多病例报告的网站上遇到了类似的问题。我希望知道受害者姓名排在首位的案例报告,因为它们更引人注目。相反,我希望所有John Doe案件都处于最底层。由于这也涉及人们的姓名,因此我也遇到了名字/姓氏排序问题。我不想将其分为两个名称字段,因为有些情况根本不是人。

我的解决方案:

我有一个显示的"名称"字段。我也有一个" NameSorted"字段,该字段在所有查询中都使用过,但从未显示过。我的输入用户界面负责自动将在排序字段中输入的" LAST,FIRST"转换为显示版本。

最后,为了"操纵"排序,我只是在排序字段的开头放置了适当的字符。由于我希望最后出现内容,因此我将" zzz"放在开头。要排在最前面,我们可以输入"!"一开始。同样,编辑UI可以为我们解决这个问题。

是的,我承认它有点俗气,但是可以。对我来说,一个优点是,我必须对不同位置的联接进行更复杂的查询以生成页面而不是RSS等,而且我不必记住复杂的表达式就可以正确排序,它始终只能通过" NameSorted " 场地。

单击我的个人资料以查看生成的网站。