正如其他人所说,重新设计最终是更好的行动方式,无论是在效率和数据完整性方面。但是,如果您绝对不能改变结构,一个可能的解决方法是创建允许的等级描述的查找表,与每一个数字的评价值一起:
GradeID | GradeText | Rating
1 | Fair | 0
2 | Good | 1
3 | Very Good | 2
4 | Ideal | 3
5 | Signature Ideal | 4
然后填充从你的选择列表查询表上的一个查询。请务必ORDER BY Rating ASC
并使用评级号码作为列表值。然后在您的操作页面上,使用所选值按范围进行过滤。 (显然验证选定的范围也是有效的)
SELECT t.ColumnName1, t.ColumnName2
FROM SomeTable t INNER JOIN YourLookupTable lt ON lt.Grade = t.GradeText
WHERE lt.Rating BETWEEN <cfqueryparam value="#form.dropdown1#" cfsqltype="cf_sql_integer">
AND <cfqueryparam value="#form.dropdown2#" cfsqltype="cf_sql_integer">
再次,我会建议重组。但是,如果这真的不是一种选择,上述应该起作用。
您的数据库设计是错误的。 :-)它应该是数字值(例如,“fair”= 0,“signature ideal”= 4),然后根据所选项目的索引,您的查询就是一个简单的BETWEEN语句。此外,您应该让用户只选择较低的值,然后在第二个组合框(下拉列表)中仅显示较高的值以供他们选择 - 这可以简化确保条件不会反转的情况(例如,低=“理想“,高=”公平“)。 –
而且,几乎在任何情况下,从长远来看,解决和修复糟糕的设计都比编码糟糕的设计更好,从而使您走上错误的道路。 –
@Ken - 你读了我的想法:) – Leigh