我创建了一张桌子.在一个字段中,我具有该记录的优先级(1-9之间).我没有为所有记录设置优先级,因此对于某些记录,它将保持为空.
在我的HTML页面中显示这些记录时,我只检查这些优先级 - 如果优先级存在,那么我将按原样显示,如果它为空,那么我将它显示为'10'的最低优先级(仅用于显示) ).
排序表时出现问题.如果我尝试使用sort(DESC)该表,它会在第一行显示10,然后继续完美(1,2,....).
怎么解决这个?
是否可以先显示优先级,然后继续显示空值?
有多种方法可以解决这个问题。
1/ 更改数据,使 10 实际上在表中(而不是 NULL):
update table TBL set FLD = 10 where FLD is null;
Run Code Online (Sandbox Code Playgroud)
2/ 修改查询以返回不同的 NULL 值:
select FLD1, FLD2, case where FLD3 is null then 10 else FLD3 end from ...
Run Code Online (Sandbox Code Playgroud)
3/ 创建一个视图来自动执行上述选项 2。
我倾向于选择选项 1,因为它可能是最有效的。
SQL 没有指定 NULL 的排序方式(尽管我认为它指定它们必须是相邻的)——这意味着它们可能位于开头或结尾(或者可能位于中间,尽管我从未见过这种情况发生)。
我提出效率方面的原因是每行函数不能很好地扩展。随着表变得越来越大,你会发现每次选择时将 NULL 转换为 10 的开销会非常大。
最好还是硬着头皮在数据库中将它们设置为 10。这将使 DBMS 更好地优化查询。而且,如果您需要使用 10 作为另一个实际优先级,只需在开始之前将所有当前的 10 更改为 11(或 9999)即可。
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |