Я сравниваю строку с несколькими столбцами таблицы, основываясь на шаблоне сопоставления строк. Я хочу присвоить вес строке, чтобы
если поисковая запись соответствует столбцу для шаблона, возвращается число, это число добавляется к возвращаемому результату из следующей последующей проверки регистра, поэтому мы вычисляем вес строки. этот запрос дает желаемые результаты, как бы я ни захотел это сделать с помощью sequalize. Я понятия не имею, как я могу рассчитать веса для с помощью sequelize, пока я сделал что-то вроде этого.
SELECT *,
CASE WHEN GivenName LIKE 'ahm%' THEN 20 else CASe WHEN
GivenName LIKE '%ahm%' then 10 else 0 end end
+ CASE WHEn FamilyName LIKE '%ahm%' then 5 else 0 END
+ CASE when Email LIKE '%ahm%' then 1 else 0 End
AS weight
FROM PersonAuth
WHERE (
GivenName LIKE '%Ahm%'
OR FamilyName LIKE '%Ahm%'
OR Email LIKE '%Ahm%'
)
ORDER BY weight DESC;
Теперь я хочу написать тот же запрос с помощью sequelize, чтобы добавить вес одной проверки условия к следующему результату условия.
let agents = (await PersonAuth.findAll({
include: [
{
model: QueueButton,
association: 'Buttons'
},
{
model: Role
}
],
attributes: [
'GivenName',
'FamilyName',
[sequalize.literal(`CASE WHEN GivenName LIKE
'${inputs.Name}%' THEN 20 else CASE WHEN GivenName LIKE
'%ahm%' THEN 10 else 0 end end`), 'weight'],
[sequalize.literal(`CASE WHEN FamilyName LIKE
'%${inputs.Name}%' THEN 5 else 0 end`),'wait'],
[sequalize.literal(`CASE WHEN Email LIKE '%${inputs.Name}'
THEN 1 else 0 end` ), 'waaait']
],
attributes: {exclude: ['Password', 'PasswordSalt']},
where : {
$or: [
{GivenName:{$like: `%${inputs.Name}`}},
{FamilyName:{$like: `%${inputs.Name}%`}},
{Email: {$like: `%${inputs.Name}%`}}
]
},
order: [
['GivenName', (inputs.sort !== null) ? ((inputs.sort) === '-name' ? 'DESC' : 'ASC') : 'ASC']
]
})).map(e => e.toJSON());
Это не дает желаемых результатов, как это происходит с SQL-запросом. Как добавить результат, возвращенный оценкой одного случая, к результату оценки следующего случая?