У меня есть две таблицы: jobs
и checklists
. Каждая запись в jobs
может содержать один или несколько элементов контрольного списка; Итак, контрольный список имеет jobId INT(11)
в качестве ключа.
Я хочу сделать запрос на jobs
, и иметь checklists
доступным для меня как jobs.checklists
.
Это то, что В настоящее время я делаю:
const jobs = (await this.stores.jobs.implementQuery({
session: request.session,
options: { ranges: { limit: 300 }, conditionsHash: { jobId: request.params.jobId } }
})).data
const jobIds = jobs.map(j => j.id).join(',')
const allChecklists = (await this.stores.checklists.implementQuery({
session: request.session,
options: { ranges: { limit: 5000 }, conditionsHash: { jobIds } }
})).data
for (let i = 0, l = jobs.length; i < l; i++) {
jobs[i] = { ...jobs[i] }
const job = jobs[i]
job.checklists = allChecklists.filter(c => c.jobId === job.id)
Где jobIds
- это список идентификаторов заданий, разделенных запятыми, и что conditionsHash: { jobIds }
обеспечит, чтобы таблица контрольных списков выполняла запросы с AND jobId IN (?,?,?,...)
- для каждого Идентификатор работы.
Да, это ужасно. Но по соображениям производительности я не могу выполнить запрос на задание, поскольку это может означать до 300 запросов.
Есть ли более близкий способ сделать это?