【问题标题】:Need help building an odd Sequelize query需要帮助构建一个奇怪的 Sequelize 查询
【发布时间】:2023-04-11 01:38:01
【问题描述】:

一些上下文:

我有两个表:challengesparticipants

challenges 表列:iduserIdname

participants 表列:iduserIdchallengeId

challenge 表中的userId 列表示挑战的所有权。

participants 表只是一个关联表,用于跟踪已加入挑战的用户。

challenges.hasMany(participants)

participants.belongsTo(challenges)

挑战的所有者可能是也可能不是参与者。


我的问题:

如何构建单个 Sequelize 查询来查找特定用户的所有拥有或加入的挑战?

示例数据:

challenges
+----+--------+-------------+
| id | userId |    name     |
+----+--------+-------------+
|  1 |   2001 | Challenge 1 |
|  2 |   2002 | Challenge 2 |
+----+--------+-------------+

participants
+----+--------+-------------+
| id | userId | challengeId |
+----+--------+-------------+
|  1 |   2001 |           1 |
|  2 |   2002 |           1 |
+----+--------+-------------+

查找用户2002的所有拥有或加入挑战的期望结果:

challenges: [
  {
    id: 1,
    userId: 2001,
    name: "Challenge 1"
  },
  {
    id: 2,
    userId: 2002,
    name: "Challenge 2"
  }
]

【问题讨论】:

  • 为了让我了解您在寻找什么,您想要一份用户拥有的任何挑战的列表或他们参与的任何挑战?不一定是他们也是参与者的挑战列表?
  • 是的,正确的。抱歉,如果这令人困惑。

标签: mysql database orm sequelize.js relational-database


【解决方案1】:

试试这个:

SELECT challenges.* 
FROM challenges 
LEFT JOIN participants 
ON challenges.id = participants.challengeId 
WHERE challenges.userId = 2002 
OR participants.userId = 2002;

【讨论】:

  • 这个查询完成了目标。谢谢!现在我只需要弄清楚如何将其转换为 Sequelize 查询...
  • 虽然我不熟悉 Sequelize,但他们的文档说您可以运行原始 sql 命令:Sequelize.query('SELECT * FROM THING')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2012-06-26
相关资源
最近更新 更多