0

我的数据库中有一个字段,它有 5 个可能的值:一般、好、非常好、理想、签名理想

我有一个coldfusion 表格,其中有2 个下拉列表,每个下拉列表都包含所有值。我想做的是能够让用户选择一个范围。例如 dropdown1 = 一般 dropdown2 = 非常好。所以这会以某种方式生成 SQL WHERE 语句:

等级 IN(“一般”、“好”、“非常好”)

考虑到值必须是这种方式,你能想出一种聪明的方法来编程吗?我想也许如果我把它们放在一个数组中然后循环遍历它或其他东西。我对此感到有些困惑,任何帮助将不胜感激。

4

1 回答 1

3

正如其他人所提到的,重新设计最终是更好的行动方案,无论是在效率还是数据完整性方面。但是,如果您绝对不能更改结构,一种可能的解决方法是创建一个允许等级描述的查找表,以及每个等级的数字等级值:

 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">

同样,我会建议重组。但是,如果这确实不是一种选择,则上述方法应该有效。

于 2012-05-25T02:27:11.697 回答