Php 在多个查询中应用同一规则的最佳方法是什么?

Php 在多个查询中应用同一规则的最佳方法是什么?,php,mysql,sql,Php,Mysql,Sql,我的应用程序有一个仪表板屏幕,其中有许多图表显示用户活动、销售业绩等的指标和结果 这些结果可以按日期、用户和许多其他选项进行过滤。假设每个图表有一个查询,那么在这些多个查询中应用相同过滤规则的最佳方法是什么?复制相同where子句的最佳方法是什么?相同的筛选规则在多个查询中使用 例如, 从日期为“2014-10-03”的用户中选择* 从日期为“2014-10-03”的产品中选择* 两个查询都有相同的规则。 一些人建议使用此规则设置一个变量,并将其连接到其他查询。比如: $where=where

我的应用程序有一个仪表板屏幕,其中有许多图表显示用户活动、销售业绩等的指标和结果

这些结果可以按日期、用户和许多其他选项进行过滤。假设每个图表有一个查询,那么在这些多个查询中应用相同过滤规则的最佳方法是什么?复制相同where子句的最佳方法是什么?相同的筛选规则在多个查询中使用

例如,

从日期为“2014-10-03”的用户中选择*

从日期为“2014-10-03”的产品中选择*

两个查询都有相同的规则。 一些人建议使用此规则设置一个变量,并将其连接到其他查询。比如:

$where=where date='2014-10-03'

$query=从用户中选择*$在哪里

$query=从产品中选择*$在哪里


但我不认为这是一个好的做法。

如果它与我过去遇到的问题类似,我想您需要这些限制条件,因为这些条件经常重复出现。用户、部门权限、时间等


在我的例子中,有效的方法是将它们转换成字符串变量,并在生成图表的查询中重用它们。当然,不要在动态查询中插入用户数据。希望能有所帮助。

如果表的日期不共享相同的列名,那么只保持值的动态性不是更好的主意吗

$date = '2014-10-03';

$query = "SELECT * FROM users WHERE `date_added` = $date";

$query = "SELECT * FROM products WHERE `date_purchased` = $date";

注意:在sql中使用用户输入数据时,请使用适当的验证和安全检查。

我认为您应该研究使用准备好的语句。类似于Oracle中的绑定变量

查询只需要分析或准备一次,但可以使用相同或不同的参数执行多次

这里有很好的解释:


还可以防止SQL注入攻击

将每个查询视为不同的操作-不要尝试跨不同的查询优化此操作。但是,请根据需要重用/缓存查询结果,例如,不需要运行相同的查询N次以显示在不同的容器中。采用适当的关系设计、适当的索引、更新的统计数据,并信任RDBMS为每个不同的查询正确地实施一个好的计划——如果有疑问,请分析性能。您能更具体一些吗?什么过滤规则?在每个查询中添加相同的where子句。@user2864740谢谢,但我的问题是复制同一where子句的最佳方式是什么相同的过滤规则包含了许多查询。@FelipeFrancisco和我的评论回复使用了三个不同的查询。如何生成它们以减少代码重复(例如)是第二个问题。我建议从头开始构建每个查询—遵循一组规则并使用适当的SQL占位符,开销可以忽略不计。您的解决方案也很有用,我也是这样做的,但这是合适的解决方案吗?当您注意SQL注入时,这样的动态查询没有什么错。在大型BI产品中,这些可能被创建为过滤器对象,但在引擎盖下,它们所做的与您已经使用串联所做的完全相同。