プロパティの 1 つ (重み) を使用して既に並べ替えられている配列があります。次に、クエリ内でこの同じ配列を使用して、各「オブジェクト」が一致する属性の数を取得します。
SELECT objectattributelink.ID, COUNT(*) Attributes
FROM objectattributelink, attributelist
WHERE objectattributelink.ID = attributelist.AttributeID
AND attributelist.AttributeDesc IN ('Solid', 'Metal', 'Red', 'AB', 'Blue', 'Liquid', 'Plastic')
AND objectattributelink.AttributeID IN ('".implode("', '", $myArray)."')
GROUP BY objectattributelink.ID
ORDER BY Attributes DESC, Order of ID's inside 'IN' Clause DESC
この配列を2つのレベルでソートしようとしています:
プライマリ (最も重要): 一致する属性の数による (クエリで既に実行済み)
セカンダリ: ID が 'IN' 句内に表示される順序に従います (したがって、各 '属性数' グループ内で重みの順序が維持されます)。
2つ目は、私が問題を抱えているものです。ケースを使用することを考えていましたが、配列の長さが異なるため (2 ~ 100)、これはオプションではありません。
注: 事前注文 (重量による) は、Ajax クロスドメイン呼び出しを使用して他のサーバーからデータを取得するため、このクエリ内ですべてを行うことはできません。