情况:
每个用户只能看到某个国家/地区和某个代理商的销售报告。
那么,哪一个更好:
$reports = $DB->select('fields'=> '*',
'table'=>'sales',
'where'=>array(
'sales_date'=>array(
'2011-06-02', '2011-06-04'),
'sales_country'=>array_keys($allow_country),
'sales_agent'=>array_keys($allow_agent)
));
或者:
$result = $DB->select('fields'=> '*',
'table'=>'sales',
'where'=>array(
'sales_date'=>array(
'2011-06-02', '2011-06-04')
));
while (($row=mysql_fetch_assoc(result)) != null) {
if (array_key_exists($row['country'], $allow_country) && array_key_exists($row['agent'], $allow_agent){
$reports[] = $row;
}
}
在良好做法和处理时间方面?
注意:我的DB类使用php prepared statement。
答案 0 :(得分:7)
数据库针对这类事情进行了优化。不要在代码中这样做。
答案 1 :(得分:5)
这里至少有两个不同的问题:
答案 2 :(得分:1)
数据库将是一个更快的过滤器。
答案 3 :(得分:1)
SQL更快,因为它已优化(可能不是您的代码)并使用索引。
答案 4 :(得分:1)
我总是在SQL中尽我所能。为什么要获取比您需要的更多信息?
答案 5 :(得分:0)
在某些罕见的情况下,人们会在代码中执行此操作而不是在SQL中执行此操作。例如,数据库可能位于高速缓存后面,因此为了保持高速缓存不那么混乱,可以对高速缓存的查询结果应用额外的过滤器。或者像HandlerSocket这样的特定查询引擎可能会限制某些查询。或者数据库可能不是最佳地使用索引,并且由于某种安全限制,开发人员可能无法添加适当的索引。
正如您所看到的,这些案例非常奇怪,因此通常您应该让数据库执行它最擅长的操作。注意你的问题,大多数时候这是一个不好的做法。不要那样做。