Как хранить пользовательские правила выбора? - PullRequest
1 голос
/ 21 февраля 2011

Мне нужно создать приложение (PHP / MySQL, но я не думаю, что это имеет значение), позволяющее пользователю вводить набор правил, соответствующих конкретным продуктам.Это должно выглядеть как форма, позволяющая выбрать ключ и ввести его значение, но поддерживающая группировку с помощью операторов OR и AND.Например, пользователь должен иметь возможность вводить следующие правила продукта: (price over 100 and red color) or (price over 50 and green color), weight over 2 и так далее.Проблема в том, что я не уверен, как мне хранить это в базе данных, и не уверен, как кодировать пользовательский интерфейс для этого.Есть ли общий подход к решению такой проблемы?

Спасибо

1 Ответ

1 голос
/ 21 февраля 2011

Я долго об этом думал. Вот к чему я пришел:

Существует таблица правил:

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>) и прочее.

...