【发布时间】:2010-11-19 01:15:15
【问题描述】:
我正在与数据库 (MySQL) 中的每个产品都属于多个类别的商品销售网站合作。我使用多对多表映射来存储产品-类别关系。
ProductID CategoryID
1 1001
1 1002
1 1003
2 1001
2 1003
2 1005
我认为这种方法对于根据类别进行一般产品搜索非常简单。
但是,内部用户会在复杂的逻辑表达式中按类别搜索产品。 例如:
输入 "(1001+1002)|1005" 查找属于 (1001 AND 1002) OR (1005) 类别的产品。 输入 "(1001+1002)|(1003+1004)" 查找属于 (1001 AND 1002) OR (1003 AND 1004) 类别的产品。
由于查询是动态的,我觉得直接翻译成SQL不好。我的方法是检索查询中出现的 ProductIDs 和 CategoryIDs(例如“(1001+1002|1005)”):
SELECT ProductID, CategoryID FROM ProCatMap WHERE CategoryID IN (1001, 1002, 1005)
然后在 PHP 中进行最终过滤。
选择 ProductID-CategoryID 记录后,我将它们组合成一个数组,格式如下: $Relation[$ProductID] = array(CategoryID1, CategoryID2 .....);所以对于上面列出的数据,数组将是
$Relation[1] = array(1001,1002, 1003);
$Relation[2] = array(1001, 1003, 1005);
我的问题是,我应该如何编写代码来解析动态逻辑查询并对数组进行过滤。
查询只包含 AND(+) 和 OR(|) 运算符和括号,并且括号总是平衡的。 (例如,每个左括号在查询中必须有一个右括号)。
非常感谢任何帮助。
【问题讨论】: