Как мне «умно перетасовать» строки в базе данных SQLite?

#sqlite

#sqlite

Вопрос:

Предположим, у меня есть файл sqlite .db, который содержит кучу данных для моей музыкальной библиотеки. Есть таблица под названием «песни» со столбцами типа «жанр», «исполнитель», «длина» и так далее. Я запускаю запрос select, который фильтрует мою коллекцию до нескольких исполнителей. Я начинаю с чего-то вроде этого:

выберите * где исполнитель = ‘MyArtist’ или комментарий типа ‘%Ключевое слово%’

Большинство исполнителей отображаются от 1 до 10 раз, но у одного исполнителя, MyArtist, около 50 песен. Я хочу перетасовать эти данные так, чтобы:

  • Один исполнитель с наибольшим количеством песен распределяется равномерно, что означает, что при наличии 200 строк этот исполнитель появляется каждые 4 итерации. Если имеется 150 строк, он появляется в каждой третьей записи и так далее.
  • Другие исполнители перемешиваются. Вы не получаете двух исполнителей подряд, если это возможно.
  • Песни распределяются по длине. Песни длиной 7 минут не будут воспроизводиться последовательно, а те, которые длятся менее двух минут, не будут воспроизводиться последовательно.

Что мне нужно добавить к моему запросу, чтобы получить желаемый результат, своего рода алгоритмическую перетасовку?

Комментарии:

1. Рассматривали ли вы возможность просто выполнить случайный порядок? Это, как правило, даст вам желаемые результаты, с оговоркой, что, например, две длинные песни могут иногда воспроизводиться рядом друг с другом и т.д.

2. Как MySQL связан с этим вопросом?

3. Я удалил mysql тег, как указано в вопросе sqlite

4. Используйте ORDER BY RANDOM

5. Я попробовал order by random(), но это делает результаты действительно случайными. Я ищу больше «перетасовки», когда строки с одинаковым значением в столбце «исполнители» не группируются вместе, а MyArtist равномерно распределяется по строкам.