У меня есть эти таблицы:
Users
Skills
Has_skills (user_id, skill_id)
ЯПередача массива идентификаторов навыков в функцию, которая должна вызывать пользователей, у которых есть хотя бы один из этих навыков. Запрос должен быть эффективным таким образом, чтобы он выбирал несколько пользователей (ограничение, диапазон или, другими словами, функциональность разбиения на страницы), но не выполнял диапазон, начиная с пользователя с идентификатором 0 и затем вверх, но диапазон начиная с пользователя снаиболее подходящие навыки по меньшей мере.
Итак, как запрос может сортировать записи по количеству совпадающих навыков от наиболее подходящих навыков до минимума, чтобы я мог добавить нумерацию страниц на основе этих результатов? Я предполагаю, что должен дополнительно настроить modifyEager на has_skills и посчитать его, а затем реализовать диапазон разбивки на страницы, но я не совсем уверен, как это сделать. Итак, в конечном итоге, это то, что мне нужно добавить:
- Запрос должен сначала выполнить упорядочение / сортировку записей по количеству совпадающих навыков
- Вышеуказанное условие должно быть ограниченопо количеству пользователей или диапазон для нумерации страниц и повышения производительности
Это моя функция:
async function getUsersWithPassedSkillIds({ skillIds }) {
const users = await User.query()
.select('users.id', 'users.name')
.joinEager('has_skills')
.modifyEager('has_skills', builder => builder.select('id', 'name'))
.whereIn('has_skills.id', skillIds)
return users
}