【发布时间】:2010-09-22 15:29:47
【问题描述】:
是否有任何已知的模式/算法关于如何以正确的方式执行排序或过滤记录列表(来自数据库)?我目前的尝试涉及使用提供一些过滤和排序选项的表单,然后将这些标准和排序算法附加到我现有的 SQL 中。但是,我发现它很容易被滥用,用户可能会得到他们不应该看到的结果。
我正在构建的应用程序是一个调度程序,我将所有事件存储在数据库表中。然后根据用户的级别/角色/权限,将显示不同的数据子集。因此我的查询可能像
一样复杂SELECT *
FROM app_event._event_view
WHERE ((class_id = (SELECT class_id FROM app_event._ical_class WHERE name = 'PUBLIC') AND class_id != (SELECT class_id FROM app_event._ical_class WHERE name = 'PRIVATE') AND class_id != (SELECT class_id FROM app_event._ical_class WHERE name = 'CONFIDENTIAL')) OR user_id = '1')
AND calendar_id IN (SELECT calendar_id FROM app_event.calendar WHERE is_personal = 't')
AND calendar_id = (SELECT calendar_id FROM app_event.calendar WHERE name = 'personal')
AND state_id IN (1,2,3,4,5,6) AND EXTRACT(year FROM dtstart) = '2008'
AND EXTRACT(month FROM dtstart) = '11'
由于我更关心提供正确的信息子集,因此目前性能不是主要问题(因为提到的 sql 是由脚本逐句生成的)。我正在考虑将所有这些复杂的 SQL 语句都转为视图,这样生成的 SQL 不合适的机会就会减少。
【问题讨论】: