Я использую Django с Postgres.
На странице я могу показать список рекомендуемых предметов, скажем, 10.
Если в базе данных у меня больше элементов, чем 10, я хочу получить их случайным образом / (лучше повернуть).
Если количество избранных предметов меньше 10, получите все рекомендуемые предметы и добавьте в список до 10 не признаваемых предметов.
Поскольку случайный выбор занимает больше времени в базе данных, я делаю выборку в python:
count = Item.objects.filter(is_featured=True).count()
if count >= 10:
item = random.sample(list(Item.objects.filter(is_featured=True))[:10])
else:
item = list(Item.objects.all()[:10])
В приведенном выше коде пропущен случай, когда выбрано менее 10 (например, 8 для добавления 2 неучтенных).
Я могу попытаться добавить новый запрос, но я не знаю, является ли это эффективным поиском, используя для этого 4-5 запросов.