如何在用户定义的公式中比较数据库中的数据

时间:2011-03-02 10:43:40

标签: php mysql

我的数据库表包含字段:

  • 的PageRank
  • sites_in_google_index
  • CONVERSION_RATE
  • sites_in_google_index
  • adsense_revenue
  • yahoo_backlins
  • google_baclinks

以及大约20多个参数 - 都是每天收集的整数

现在我需要添加用户可能性来定义自己的密钥并在图形上虚拟化这些数据,例如用户可以像这样定义:

NEW_KEY_1 = pagerank*google_backlinks-(conversion_rate+site_in_google_index)

NEW_KEY_2 = adsense_revenue*NEW_KEY_1

现在他应该在图表上显示选定时间段内的这两个数据键,例如:01-12-2009至02-03-2011

存储和评估此类数据/密钥的最佳策略是什么?

1 个答案:

答案 0 :(得分:1)

最简单的方法是允许用户定义SQL选择器并在查询中使用数据库。但是,不要这样做(!),因为它是你可以挖掘的最大的安全性团体之一!

一般的想法应该是为用户提供某种“自定义查询语言”。然后,您需要一个解析器来验证其表达式并从中创建一个抽象语法树。然后可以将此语法树转换为相应的SQL查询部分。

在您的特定情况下,您将基本上最终解析算术表达式,以验证用户提供的字段仅包含此类表达式并且它们是有效的,并将相应的树序列化回SQL算术表达式。这里的其他好处是你可以确保只使用有效的字段名称,你可以限制表达式的复杂性,并且可以在以后添加自定义操作符。