按查询顺序使用特定列或按字母顺序排列。 - Coldfuison

问题描述:

我们有一个coldfusion网站,它检索我们的类别,然后按字母顺序显示它们。按查询顺序使用特定列或按字母顺序排列。 - Coldfuison

我们希望能够通过手动排列带有数字的“排序”列的类别,但是如果此数字等于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 
    ORDER BY thrdctgry_Name ASC 
</cfquery> 

它的工作原理,如果我尝试

ORDER BY thrdctgry_Sort ASC 

,但我不能为我的生命连接起来,主要归功于我缺乏程序员技能。

任何意见将不胜感激。

+0

所以你想通过'thrdctgry_Sort'进行排序,但如果它是零或null,那么你想按'thrdctgry_Name'进行排序? – Taryn 2012-08-16 15:06:14

+0

恰恰如此,如果我们明确地设置排序顺序,它将遵循一个数字的地方,其他任何东西都将按字母顺序排列。 – matthew 2012-08-16 15:55:46

我可能误解了问题,但你应该能够只是排序上的两列:

ORDER BY thrdctgry_Sort ASC, thrdctgry_Name ASC 
+0

这工作完美,谢谢你的帮助! – matthew 2012-08-20 08:10:05

这是您的查询与加盟:

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 

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

+0

嗨,*,谢谢你的帮助。我有一个404后,我虽然做这些改变,这里是在查询全 - SELECT * 从tbl_prdtthrdcats p 加入页上tbl_scnd_thrdcat_rel小号 .thrdctgry_ID = s.thrdctgry_ID 其中 s.scndctgry_ID =#URL.secondary# 和thrdctgry_archive = 0 为了通过 情况 当ISNULL(thrdctgry_Sort,0)= 0 然后thrdctgry_Name 别的thrdctgry_Sort 端ASC matthew 2012-08-16 16:02:47

+0

你的意思是一个HTTP错误404?你可以在你的SQL数据库中检查这个查询吗?你使用的是什么数据库引擎? – Farhan 2012-08-16 19:06:52

+0

感谢*,但我在数据库中尝试了这一点,但没有奏效,这可能是我有限的编程知识! – matthew 2012-08-20 08:09:12

<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是最好的选择,但如果*加齐的解决方案不工作这应该使用你的服务器端代码做的伎俩。

+0

感谢您的建议,但cfif查询只是导致了404错误 – matthew 2012-08-20 08:09:45