我要从"产品"中提取所有产品。 table(DBMS:MySQL,Adapter:PDO),按匹配的过滤条件数排序结果。
这是原始SQL查询的示例(但我将使用Zend_DB类和适配器):
SELECT *
FROM product
WHERE price < 300
AND price > 100
AND discount = TRUE
AND used = FALSE
AND type = MEAL
and a lot of other optionals filter criteria that end user could introduce from the UI.
所有过滤条件(查询中的条件)都可以由用户以Web应用程序的形式选择性地匹配, GOAL我的算法是从最匹配的标准产品订购结果符合至少2个标准的产品。
我使用的是Zend Framework 1,我的问题是: 是否有任何Zend类可以帮助我在这个特定的算法? 如果不是,有人可以建议解决这个问题吗?
我已经尝试了一个粗略的解决方案,我会在考虑所有可能的标准组合的情况下编写查询,但考虑到有很多标准,算法复杂性增加了很多,所以我想可能存在替代方案。 感谢
答案 0 :(得分:1)
像...一样的东西。
SELECT * FROM (
SELECT P.*,
case when price < 300 and price > 100 then 1 else 0 end +
case when discount = true then 1 else 0 end +
case when used = false then 1 else 0 end +
case when type = 'MEAL' then 1 else 0 end +
... (for each possible outcome) as Matches
FROM product p)
Where matches > 2
Order by Matches descending