node.js - 续集查询以根据列值获取不同行的不同列
问题描述
我有以下架构
module.exports = (sequelize, DataTypes) => {
const Photo = sequelize.define(
"Photo",
{
photoURL: {
type: DataTypes.STRING,
allowNull: false
},
blurPhotoURL: {
type: DataTypes.STRING,
allowNull: false
},
userId: { //userId of user who has uploaded the photo
type: DataTypes.UUID,
allowNull: false
},
isPublic: {
type: DataTypes.BOOLEAN,
default: false
}
}
{}
);
}
我还有一个架构SubscriberInfo
module.exports = (sequelize, DataTypes) => {
const SubscriberInfo = sequelize.define(
"SubscriberInfo",
{
userId: { // subscriber userId
type: DataTypes.UUID,
allowNull: false
},
modelId: { //subscribed userId
type: DataTypes.UUID,
allowNull: false
}
},
{}
);
}
因此,就像 Instagram 个人资料一样,用户可以隐藏照片,只有他的追随者才能看到照片,而用户的重置将看到同一张照片的模糊版本。
我已经设法将模糊照片和原始照片保存在我的数据库中,并且isPublic
是用于判断照片是否为私人照片的列。
在我的 UI(个人资料部分)上,我想根据查看个人资料的用户显示照片和模糊照片。
我可以在一个查询中实现这一点,在我返回的 JSON 中,我得到blurPhotoURL
或photoURL
取决于用户是谁以及照片是否是isPublic
。
谢谢你的建议!
解决方案
你可能想要这样的东西:
select
case when CUR_VIEWER_USER in -- check if current user is SubscriberInfo
(select modelId SubscriberInfo SI
where p.userId = si.userId)
then photoURL
else blurPhotoURL as photo_for_user
from Photo P
where isPublic = true
or (isPublic = false and userId = CUR_VIEWER_USER) -- if curUser is owner show his unpublished photos
从该查询中,您可以获得基本的想法,如何将其更改为适合您的情况。我不确定如何将 current_user 插入到查询中,但您仍然有起点。
推荐阅读
- php - 如何获取层次结构中最高级别的类别计数?
- laravel - Laravel - Jobs 表上的 reserved_at 和 available_at 有什么区别?
- javascript - 如何在 vue 上设置参数事件目标的值?
- flutter - Flutter中的Textformfield选择控件
- javascript - Discord SDK client.guilds.channels.values 未定义
- java - 为什么当启动代码 X 的其他代码结束时,java 代码 X 会中断?
- java - 如何创建控制器以将新数据添加到表中以实现一对一关系
- ios - 奇怪的不可检测的内存泄漏
- c# - AddressAccessDeniedException:HTTP 无法注册 URL http://+:8080/api/ - 如何:从 .NET 进程以编程方式“netsh http 添加 urlacl”?
- reactjs - 如何在蚂蚁设计中只检查一组复选框中的单个复选框?