0

私は次のクエリを受け取りました:

SELECT      SQL_CALC_FOUND_ROWS u.unit_id, u.unit_serial_full, u.unit_status, u.contract_id, u.warehouse_id,
            m.model_name,
            c.contract_name,
            t.transfer_id,
            w.warehouse_name_full
FROM        units AS u
LEFT JOIN   models AS m ON m.model_id = u.model_id
LEFT JOIN   contracts AS c ON c.contract_id = u.contract_id
LEFT JOIN   transfers AS t ON t.transfer_id = u.transfer_id
LEFT JOIN   warehouses AS w ON w.warehouse_id = u.warehouse_id
LEFT JOIN   units_attributes AS ua ON ua.unit_id = u.unit_id
WHERE       1
        AND u.company_id = :company_id
        AND (
                (
                    u.model_id = "4"
                AND (
                        ua.attribute_id = :attribute_id_0 AND attribute_default = :attribute_value_0
                    )
                AND (
                        ua.attribute_id = :attribute_id_1 AND attribute_default = :attribute_value_1
                    )
                )
            )

2つ以上の属性で検索した場合、結果は得られませんが、属性が1つしかない場合、クエリは期待どおりに機能します。何か案は ?

検索は厳密でなければなりません。ワイルドカードは使用しません。

ありがとう。

4

3 に答える 3

0

ええと、ua.attribute_id は一度に 2 つの値にすることはできません

(
    ua.attribute_id = :attribute_id_0 AND attribute_default = :attribute_value_0
)
AND (
    ua.attribute_id = :attribute_id_1 AND attribute_default = :attribute_value_1
)
于 2013-02-27T16:31:33.497 に答える
0
SELECT      SQL_CALC_FOUND_ROWS u.unit_id, u.unit_serial_full, u.unit_status, u.contract_id, u.warehouse_id, m.model_name, c.contract_name, t.transfer_id, w.warehouse_name_full
FROM        units AS u
LEFT JOIN   models AS m ON m.model_id = u.model_id
LEFT JOIN   contracts AS c ON c.contract_id = u.contract_id
LEFT JOIN   transfers AS t ON t.transfer_id = u.transfer_id
LEFT JOIN   warehouses AS w ON w.warehouse_id = u.warehouse_id
LEFT JOIN   units_attributes AS ua ON ua.unit_id = u.unit_id
WHERE 1 = 1
    AND u.company_id = :company_id
    AND u.model_id = "4"
    AND ua.attribute_id IN (:attribute_id_0, :attribute_id_1)
    AND attribute_default IN (:attribute_value_0, :attribute_value_1)
于 2013-02-27T16:32:00.580 に答える
0

列が同時に 2 つの異なる値を持つことはできません。したがって、 などのフィルターua.attribute_id = :foo AND ua.attribute_id = :barImpossible WHERE句になります。

通常、最善の解決策は、結果をグループ化し、結果のグループをフィルタリングして、基準を満たすレコードを含むグループのみを抽出することです。つまり、次のHAVING句を使用します。

GROUP BY col1, col2, col3
HAVING   SUM(ua.attribute_id = :foo) AND SUM(ua.attribute_id = :bar)
于 2013-02-27T16:47:46.857 に答える