2 つの MySQL テーブルがあります。
- 属性 (属性 ID、名前)
- 製品属性 (製品 ID、属性 ID、表示値)
「製品タイプ」と呼ばれる属性名ごとに、この「製品タイプ」に関連付けられている他のすべての属性を取得する必要があります。例として、属性テーブルは次のようになります。
attributeid name
1 A
2 B
3 Product Type
4 D
productsattributes テーブルは次のようになります。
productid attributeid displayvalue
1 3 FAN
1 1 Brown
1 2 Stand
2 3 FAN
2 4 D
3 3 CAR
3 4 imported
したがって、最終結果は次のようになります。
FAN (A,B, Product Type,D)
CAR (Product Type, imported)
これが私の試みです:
- まず、productattributes からすべての「表示値」を取得します。
SELECT DISTINCT displayvalue
FROM productsttributes
WHERE attributeid = 3;
- 次に、各「displayvalues」をループして、他の属性を見つけます。
SELECT a.name
FROM attributes a
INNER JOIN productsattributes pa
ON pa.attributeid = a.attributeid AND productid in (
SELECT productid
FROM productsttributes
WHERE dispalyvale = '$displayvalue')
ORDER BY a.name;
問題は、productattributes テーブルに約 700 万行あるため、スクリプトに時間がかかることです。もちろん、10 分の解決策を探しているわけではありませんが、少なくともクエリが少し改善されます。