排序查询以根据列值获取不同行中的不同列

时间:2019-09-25 03:27:41

标签: node.js plsql sequelize.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中,我会根据用户是blurPhotoURLphotoURL以及用户是否是isPublic来获得照片。

谢谢你!

1 个答案:

答案 0 :(得分:1)

您可能想要类似的东西:

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插入查询中,但是您仍然有一个起点。

相关问题