Как назначить вес результатам, полученным из базы данных с помощью sequelize? - PullRequest
0 голосов
/ 11 января 2019

Я сравниваю строку с несколькими столбцами таблицы, основываясь на шаблоне сопоставления строк. Я хочу присвоить вес строке, чтобы если поисковая запись соответствует столбцу для шаблона, возвращается число, это число добавляется к возвращаемому результату из следующей последующей проверки регистра, поэтому мы вычисляем вес строки. этот запрос дает желаемые результаты, как бы я ни захотел это сделать с помощью 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-запросом. Как добавить результат, возвращенный оценкой одного случая, к результату оценки следующего случая?

...