我们有一个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
但我不能为我的生活加入他们,主要是因为我缺乏程序员技能。
非常感谢任何建议。
答案 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的解决方案不起作用,那么应该使用服务器端代码。