#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 равномерно распределяется по строкам.