0

ユーザーが指定した年齢要件に一致する製品を返すクエリを実行する必要があります。データベース内の製品には、適用される最小年齢と最大年齢が割り当てられます (min_age & max_age)。ユーザーは、検索したい年齢範囲を選択します (この質問のために、これを userMinAge と userMaxAge と呼びましょう)。

ユーザーが選択した年齢範囲と製品に対して保存されている年齢範囲の間にクロスオーバーがある製品を返品したいので、次の不等式の 1 つだけを満たす必要があると考えています。

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 に答える