过滤数据库级别或应用程序级别的数据

时间:2013-10-27 07:42:11

标签: php database

我有一个数据库设计,我有一个可以有多个属性的产品。我在数据库设计方面不太好,这就是为什么这个问题,

Product
------------------------------------
Id           Name         Model
------------------------------------
1            Galaxy S     GT-XX123
2            Galaxy Y     GT-YY123


Product Specifications
-------------------------------------
Spec         Value        ProductId
-------------------------------------
OS           Windows            1
Processor    Dual Core          1
Screen       3.5 Inch           1
OS           Android 4.1        2
Processor    Quad core          2

现在我想给用户一个基于属性过滤产品的工具,比如OS = Android,Processor = Quad core。所以我的问题是,通过编写复杂查询来获取数据从数据库获取数据是否是一个好主意,或者它是否适合首先获取数据然后在应用程序级别上过滤数据?

修改

我尝试通过分析每个过滤器然后构建最终查询来创建查询,但是在这种情况下应用多个过滤器时查询不起作用。我面临的主要问题是如何从两个不同的值中选择单个记录?所以我正在努力解决这个问题,同时我想到了这个问题所以我问了,所以不要贬低帮助,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

一般来说,我会说在SQL中过滤是否容易,肯定会在那里完成工作。除了其他任何东西,您的SQL系统都会调整为执行这些操作(使用INDEX等)。

第二个考虑因素是,如果您将整个数据集发送回PHP,则需要将这些数据集存储在内存中,同时循环查找匹配的数据。

然而,在某些情况下,最佳解决方案是中途的房子,您可以在SQL中进行最高级别的过滤,然后在PHP中“微调”结果。

答案 1 :(得分:0)

我相信过滤行为是一项商业规则。话虽如此,我也相信业务规则属于应用程序代码而不是sql代码。

现在我已经说过了,让我告诉你:你应该尝试永远不要从数据库中返回比你需要的更多的数据。

那么离开我们的地方呢?我不确定你正在使用什么技术(看起来它可能是我没有经验的PHP),但如果你有一个很好的ORM为你构建sql,你应该能够充分利用这两个世界通过将过滤规则抽象到应用程序逻辑中,并将它们与ORM一起使用,以确保从数据库中获得完全正确的数据量。

祝你好运!