2

この質問は、在庫管理アプリケーションに関する最初の質問で提案したスキーマに関連しています。

特定のアイテムの現在の在庫を提供する MySQL クエリを作成しようとしています。

クエリは機能していますが、必要な情報を取得するためのより効率的な方法があるかどうか疑問に思いました。

SELECT 's'.*,
    'v1'.'attribute_id' AS 'att1',
    'v1'.'value' AS 'val1'
    'v2'.'attribute_id' AS 'att2',
    'v2'.'value' AS 'val2'
FROM 'eav_ev' AS 'ev1'
INNER JOIN 'stock' AS 's' ON s.id = ev1.stock_id
INNER JOIN 'eav_ev' AS 'ev2' ON ev1.stock_id = ev2.stock_id
INNER JOIN 'eav_value' AS 'v1' ON v1.id = ev1.value_id
INNER JOIN 'eav_value' AS 'v2' ON v2.id = ev2.value_id
WHERE (ev1.entity_id = '45')
    AND (ev1.value_id <> ev2.value_id)
    AND (s.total > 0)
GROUP BY 'ev1'.'stock_id'
ORDER BY 'ev1'.'value_id' ASC

これは、次の行に沿って何かを返します

array (1) {
    [0] => array(5) {
        ["stock_id"] => "2"
        ["att1"] => "3"
        ["val1"] => "M12"
        ["att2"] => "4"
        ["val2"] => "45"
    }
}

非常に厄介なように見えますが、私の貧弱な脳は、より良いものを思いつくことができません.

助言がありますか?

4

1 に答える 1

0

を使用する代わりに、最初に属性のリストを保存する場合にattribute_id AS att1も使用できます。value AS attribute_Xクエリをキャッシュするだけで、必要なすべてのデータを 1 つのクリアクエリで選択できます。

最初に属性 ID のリストをフェッチしたと仮定すると (つまりSELECT attribute_id FROM eav_value)、これを選択します。

SELECT
    v1.value_id AS attribute_1 -- (or whatever the ID was fetched in the first query)
    v2.value_id AS attribute_2 -- (or whatever the second ID was fetched in the first query)
...
于 2010-08-10T03:46:37.313 に答える