我需要构建一个应用程序(PHP / MySQL,但我认为这不重要),让用户输入一组匹配特定产品的规则。这应该看起来像一个表单,允许选择一个键并输入其值,但支持使用OR和AND语句进行分组。例如,用户应该能够输入以下产品规则:(price over 100 and red color) or (price over 50 and green color)
,weight over 2
等。问题是,我不确定如何将其存储在数据库中,并且不确定如何为此编写UI。有没有解决这个问题的常用方法?
由于
答案 0 :(得分:1)
我一直在思考这个问题。这就是我的意思:
有一个规则表:
rule_id int,
field1 varchar,
rule1_id int,
operand varchar, --whatever, can be int, if operand is described in other table.
field2 varchar,
rule2_id int
您的示例规则可以用这种方式表达:
rule_id field1 rule1_id operand field2 rule2_id
1 'price' null '>' '100' null
2 'color' null '=' 'red' null
3 null 1 'and' null 2
4 'price' null '>' '50' null
5 'color' null '=' 'green' null
6 null 4 'and' null 5
7 null 3 'or' null 6
然后,您将使用rule_id
= 7引用复杂规则。要解决该规则,应以递归方式解析每个其他规则。 field
可以是数据库中的字段,也可以是operand
。然后,您就可以从此保存的数据中创建SQL查询。它也很容易加载并呈现到控件中,因此用户可以使用组合框(HTML <select>
)和内容来编辑此规则。