0

我需要运行一个查询来返回符合用户给出的年龄要求的产品。为数据库中的产品分配适用的最小和最大年龄(min_age 和 max_age)。用户将选择他们希望搜索的年龄范围(为了这个问题,我们称之为 userMinAge 和 userMaxAge)。

由于我想退回用户选择的年龄范围和针对产品存储的年龄范围之间存在交叉的任何产品,我认为这需要满足以下不等式之一 -

userMinAge <= min_age <= userMaxAge 或

userMinAge <= max_age <= userMaxAge

我正在尝试使用 Yii 的 CDbCriteria 运行它,并提出了以下内容-

$criteria->condition = "$minAge <= min_age <= $maxAge OR $minAge <= max_age <= $maxAge";

这运行正常(因为没有抛出错误),但不排除它应该排除的产品。即,当用户选择 20-35 岁时,包含了 8-19 岁的产品。出了点问题,但我对 CDbCriteria 的相当一般的理解让我有些困惑。

谁能发现为什么这种方法不起作用?我在使用 CDbCriteria 时是否有任何错误?

非常感谢,

4

1 回答 1

2

你可以试试

    $criteria->condition = "($minAge <= min_age <= $maxAge) OR ($minAge <= max_age <= $maxAge)";
$criteria->condition = "(min_age BETWEEN $minAge AND $maxAge) OR(max_age BETWEEN $minAge AND $maxAge)";

如果这不能解决您的问题,请提及您的数据库架构,然后很容易说出出了什么问题...

于 2013-06-16T17:57:44.727 回答