テーブルに含まれるオブジェクトの ID を注文しようとしています。このために、「IN」句内の属性の順序に基づく次の階層を使用しています。
オーダーバイ
最初:すべての属性に一致する ID: 'Solid' と 'Metal' と 'Red'
2 番目:属性に一致する ID: 'Solid' および 'Metal'
3 番目:属性のみに一致する ID: 'Solid'
4 番目:属性に一致する ID: 'Metal' および 'Red'
5 番目:属性「Metal」のみに一致する ID
6 番目:属性「赤」にのみ一致する ID
私が使用している主なクエリは次のとおりです。
SELECT objectattributelink.ID, COUNT(*) Attributes
FROM objectattributelink, attributelist
WHERE objectattributelink.ID = attributelist.AttributeID
AND attributelist.AttributeDesc IN ('Solid', 'Metal', 'Red')
AND objectattributelink.AttributeID BETWEEN 1000 AND 1200
GROUP BY objectattributelink.ID
ORDER BY COUNT(*) DESC
これは、すべての ID を単純化された順序で返します。この場合、一番上のもの (3 つの属性に一致するもの) は問題ありませんが、残りの順序はランダムです。
私の現在のソリューションは 6 つの異なるクエリを実行していますが、1 つのクエリで実行できるかどうかを知りたいです。
私が基本的に各クエリに対して行っていることは次のとおりです。
1 つ: IN ('Solid', 'Metal', 'Red') および HAVING Attributes = 3、2 つ目: IN ('Solid', 'Metal') および HAVING Attributes = 2、3 つ目: IN (' Solid')、4 つ目: IN ('Metal', 'Red') および HAVING Attributes = 2、5 つ目: IN ('Metal') および 6 つ目は IN ('Red')