Извлекать из базы данных строки, упорядоченные по логическому столбцу, но также случайным образом как второй критерий - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть таблица предметов:

id | name | is_featured
1    name1       false 

Предметы из этой таблицы мне нужно показать их случайным образом, но сначала is_featured. Правила таковы:

  1. Если считать is_featured=True> 6, получить is_featured=True все, и рандомизировать и получить первые 6

  2. Если считать is_featured=True <6, получить <code>is_featured=True все и рандомизировать Подсчитайте, сколько не хватает до 6. Получите из неучтенного случайного числа оставшиеся предметы. Единственные списки.

Я делаю это за 2-3 шага в базе данных:

  • сначала посчитать количество избранных
  • сначала включите функцию, затем получите остальные, если необходимо, и рандомизируйте (в бэкэнде)

Можно сделать это за один шаг, в базе данных?

1 Ответ

1 голос
/ 13 апреля 2019

Вы, кажется, хотите шесть рядов, с is_featured первым. Вы можете сделать это за один шаг:

select i.*
from items i
order by i.is_featured desc,  -- true is first
         random()
fetch first 6 rows only;

То есть сначала отсортируйте все данные с помощью is_featured. Затем выберите первые шесть.

...