javascript - 我想为从 mysql 数据库登录的每个用户发送唯一记录
问题描述
我想发送每个登录唯一记录列表的用户,即来自数据库的不同记录,对于我想跳过已经发送给其他签名用户的记录的每个用户。我是初学者,如何我可以实施吗?这是从数据库中获取记录的代码
phrases.findAll({
where: {
userId: user.id,
phraseStatus: 1
},
limit: 10,
offset,
10
})
.then((data) => {
userObj.phrases.push(...data);
return res.status(200).json(userObj);
});
解决方案
您将需要跟踪已发送给其他用户的内容。我建议您保留一张表格,phrases_sent
以记录到目前为止已发送的内容。添加phrase_id
到这个新表中,以便建立关系。
查看文档中的关联。
phrases
然后,您可以通过外部连接到您的表来查询该表,phrases_sent
以返回迄今为止尚未发送的短语。
就像是:
const phrases = await sequelize.models.phrase.findAll({
where: {
'$phrasesSents.phrase_id$': {[Op.is]: null} // query the joined table
},
attributes: ['phrase.phrase'], // the unused phrases
include: [
{
attributes: [],
model: sequelize.models.phrasesSent,
required: false, // specify this is a left outer join
}
],
raw: true,
nest: true
});
会产生:
SELECT "phrase"."phrase"
FROM "phrases" AS "phrase"
LEFT OUTER JOIN "phrases_sent" AS "phrasesSents" ON "phrase"."id" = "phrasesSents"."phrase_id"
WHERE "phrasesSents"."phrase_id" IS NULL;
我相信与 NOT IN (SELECT ...) 样式查询相比,执行 LEFT OUTER JOIN 具有性能优势。
推荐阅读
- spring - 如何使用 @EnableCache 、多个 CacheManagers 和自定义缓存解析器
- flutter - 如何从 StreamBuilder 中访问快照?
- javascript - 将javascript参数字传递给自定义函数
- python - Google ReCaptcha 3 总是返回 0.9 的分数
- php - 如何在php中用星号替换手机号码,除了最后4位数字
- javascript - 如何在多个 Dropzone 上显示来自服务器的文件
- amazon-web-services - 如何在不使用 AD SAML 2.0 的 aws cognito 中的托管 ui 的情况下获取 jwt 令牌
- flutter - 升级到 Flutter 1.7.8+hotfix.3 时无法编译
- c++ - 这个函数被调用了多少次?
- vb.net - Visual Basic,查找和替换文本