我有一个页面,列出表中的记录。在表格的标题中,我们有过滤器可以筛选出所选值的记录。为了填充这些过滤器列表,我需要从数据库中获取不同的值。例如,当一个公司的上市员工让我们说我有姓名,年龄,薪水过滤器,那我也有单独的查询,如获取数据表中筛选器列表中的一个SQL
select distinct name from employee where company = `fordwagen`
我怎样才能得到所有三个列出了姓名,年龄和薪金一个SQL不会有三个数据库调用?
我有一个页面,列出表中的记录。在表格的标题中,我们有过滤器可以筛选出所选值的记录。为了填充这些过滤器列表,我需要从数据库中获取不同的值。例如,当一个公司的上市员工让我们说我有姓名,年龄,薪水过滤器,那我也有单独的查询,如获取数据表中筛选器列表中的一个SQL
select distinct name from employee where company = `fordwagen`
我怎样才能得到所有三个列出了姓名,年龄和薪金一个SQL不会有三个数据库调用?
会不会有很多重名?一个充满史密斯先生和夫人的公司?可能不会。
所以,简单地
select first_name, last_name, age, salary from employees;
拿到,说1000条员工记录,而不是250个的名字,700个姓氏,30岁和120倍的工资。然后循环浏览应用中的记录,并尽可能减少流量。
select name as filter_value, 'name_filter' as filter_type from employee group by name
union
select ages as filter_value, 'age_filter' as filter_type from employee group by ages
union
select salary as filter_value, 'salary_filter' as filter_type from employee group by salary
该组由by将具有相同的效果作为distinct,您可以使用任何语法。这使您作为filter_value
和filter type
列表。通过正确的filter_type
填充每个过滤器列表。
希望我有你在问什么在这里吧...如果我走了
列别名不是文字,他们不采用单引号。 – APC
当你的意思是“DISTINCT”时,不要使用“GROUP BY”。你不是聚合,你只是删除重复。然后使用'TO_CHAR'使查询返回相同的数据类型;否则你会得到'ORA-01790:表达式必须和对应的表达式具有相同的数据类型。 –
- 我不想花时间去通过数据库中的每个表联网评论,其实我有超过十个列表。
网络通信量 - 数据包的数量 - 将大体上相同,您是否发出十个单独的呼叫或一个组合调用。
- 即使我使用连接池,我也不想在同一页上多次访问数据库。
好的。但更重要的是你如何设计你的应用程序层。
- 我需要为不同的数据库调用不同的方法,我不希望让很多地方的变化在需求变更的情况。
看来你有“干净的代码”不同寻常的理解。单一职责原则(该小号固体)是干净的代码的基石。有十种方法,每种方法做一件事比一件做十件事的方法更清洁。
也许你需要的是一个高速缓存?如果过滤器的目标表格相对缓慢地变化,则结果集缓存可能非常有效。 Oracle支持数据库和客户端的缓存 - 内置失效 - 。 Find out more。即使你的目标表经常改变,也许你可以维护更静态的过滤器表。
你的目的是避免三次数据库调用?你想优化什么? – APC
网络,数据库会话,更干净的代码等等...... – mCeviker
在写入的数字SQL语句和其中的任何内容之间没有必要的连接。你希望我们花时间帮助你:至少你可以做的是投入一些时间来构建一个体面的问题。请解释你想达到的目标。 – APC