按特定列或字母顺序查询。 - Coldfusion

时间:2012-08-16 14:59:09

标签: sql coldfusion sql-order-by

我们有一个coldfusion网站,可以检索我们的类别,然后按字母顺序显示它们。

我们希望能够通过手动排列带有数字的'sort'列的类别来强制执行订单,但是如果此数字等于0或null则使用字母顺序。

所以目前查询是

<cfquery name="qGetThrdCat" datasource="#request.dsn#">
    SELECT *
    FROM tbl_prdtthrdcats, tbl_scnd_thrdcat_rel
    WHERE tbl_scnd_thrdcat_rel.thrdctgry_ID = tbl_prdtthrdcats.thrdctgry_ID
    AND tbl_scnd_thrdcat_rel.scndctgry_ID = #URL.secondary#
    AND thrdctgry_archive = 0
    ORDER BY thrdctgry_Name ASC
</cfquery>

如果我尝试

,它会起作用
ORDER BY thrdctgry_Sort ASC

但我不能为我的生活加入他们,主要是因为我缺乏程序员技能。

非常感谢任何建议。

3 个答案:

答案 0 :(得分:7)

我可能误解了这个问题,但您应该能够对两个列进行排序:

ORDER BY thrdctgry_Sort ASC, thrdctgry_Name ASC

答案 1 :(得分:2)

以下是您使用join的查询:

select *
from tbl_prdtthrdcats p
join tbl_scnd_thrdcat_rel s
    on p.thrdctgry_ID = s.thrdctgry_ID
where
    s.scndctgry_ID = #URL.secondary# 
and thrdctgry_archive = 0

对于排序,您可以在ORDER子句中使用CASE。

order by
case
    when isnull(thrdctgry_Sort, 0) = 0
    then thrdctgry_Name
    else thrdctgry_Sort
end asc

说实话,我无法完全理解您的排序顺序,但您可以更多地使用它。

答案 2 :(得分:0)

<cfquery name="qGetThrdCat" datasource="#request.dsn#">
SELECT *
FROM tbl_prdtthrdcats, tbl_scnd_thrdcat_rel
WHERE tbl_scnd_thrdcat_rel.thrdctgry_ID = tbl_prdtthrdcats.thrdctgry_ID
AND tbl_scnd_thrdcat_rel.scndctgry_ID = #URL.secondary#
AND thrdctgry_archive = 0
<cfif isNumeric(thrdctgry_Sort) and thrdctgry_Sort GT 0>
ORDER BY thrdctgry_Sort
<cfelse>
ORDER BY thrdctgry_Name ASC
</cfif>

使用SQL是最好的选择,但如果Muhammad Ghazi的解决方案不起作用,那么应该使用服务器端代码。