Прошло много времени, и у меня возникают проблемы с тем, чтобы обернуть голову вокруг алгоритма, который я пытаюсь сделать.Существует список объектов с различной конфигурацией, которые хранятся в таблице.
Может быть m различных типов конфигурации, например, A, B, C и т. Д.
И каждый типконфигурация может иметь подтипы
Object,Parent Configuration,Configuration,Rank
O1, A, A1, 1
O2, A, A2, 2
O3, A, A3, 3
O4, B, B1, 4
O5, B, B2, 5
O6, B, C1, 6
O7, C, C2, 7
Учитывая пользователя, который хочет, чтобы n объектов, имеющих любую конфигурацию, в указанном порядке упорядочены по рангу так, чтобы не было максимального количества различных возможных конфигураций объекта, например:
если n == 3, и пользователь интересуется конфигурацией в A1, A2, B1, B2, C1, C2
, тогда нормальный SQL-запрос, такой как
SELECT *
FROM table
WHERE configuration IN ( a1, a2, b1, b2,
c1, c2 )
ORDER BY rank
LIMIT 3;
, вывод будетбыть объектами O1, O2 и O3, так как их ранг наивысший, но оптимальное решение - вернуть объекты O1, O4, O6, объект наивысшего ранга для каждой родительской конфигурации,
скажем, если в вышеприведенном примере n ==4 тогда вывод будет O1, O4, O6 и O2, так как мы исчерпали все различные типы конфигурации, поэтому мы снова возвращаем объект высшего ранга.
Любая помощь?