【问题标题】:Complex MySQL Query for related users and posts相关用户和帖子的复杂 MySQL 查询
【发布时间】:2023-04-05 05:26:01
【问题描述】:

我需要构建一个 MySQL 查询,以便在将评论添加到帖子时通知用户软件包。我为此准备的表格是

帖子:pid、uid

评论:cid、uid、pid

用户:uid

相关:rid、uid1、uid2

设备:did、uid

一个帖子可以有多个 cmets,每个用户可以发布多个 cmets,一个用户可以有很多设备。

插入评论时,我需要为目前为 cmets 做出贡献的每个人(包括作者)获取唯一设备列表,但仅限于与发表评论的用户相关的地方。

redlated.uid1

持有用户ID和

related.uid2

持有他们相关的用户 ID,例如

-----------------------------------
| rid       |  uid1      |  uid2  |
-----------------------------------
| 1         |  34        |  43    |
-----------------------------------
| 2         |  43        |  34    |
-----------------------------------

我有以下数据

PostAuthorId | 邮政编号 | 用户 ID

谁能帮助我正在努力获取正确的数据到目前为止所有查询都是错误的,我没有发布一个,因为我认为它可能会进一步混淆。

正如我所说,我只需要退回独特的设备,任何帮助都会很棒,谢谢

编辑 SQLFIDDLE **

http://sqlfiddle.com/#!2/4217f


【问题讨论】:

  • 能否请您添加所有相关的 MySQL 表列?
  • > 帖子:pid、uid > 评论:cid、uid、pid > 用户:uid > 相关:rid, uid1, uid2 > Devices: did, uid devices.did 最终是我想要返回的
  • 所有为 cmets 做出贡献的人 - 我如何知道哪些用途促​​成了评论?那是在单独的表中吗?
  • @JustinErswell,如果您向我们展示您的表格结构会更好。您可以为此使用sqlfiddle.com

标签: mysql sql entity-relationship


【解决方案1】:

您只需要一个正确的(多)JOIN

SELECT ...
FROM Posts P
INNER JOIN Users O ON P.uid = O.uid  -- Post owner
INNER JOIN Devices OD ON O.uid = OD.uid  -- Devices of post owner
INNER JOIN Related R ON O.uid = R.uid1  -- Post owner to other user relationship
INNER JOIN Comments C ON R.uid2 = C.uid AND P.pid = C.pid  -- Comments by related user
INNER JOIN Devices CD ON C.uid = CD.uid  -- Devices of users posting comments
WHERE pid = yourPostID

应该这样做。
不要忘记您有两次 Devices 表,因此您必须通过 OD(​​所有者)和 CD(评论海报)设备引用它们

【讨论】:

  • 这看起来不错,但它没有返回原始帖子作者设备@germann-arlington
  • @Justin Erswell 为INNER JOIN Devices D1 ON P.uid = D1.uid添加另一个JOIN
  • 不幸的是我得到了同样的结果我错过了什么吗?你能更新你的答案吗,非常感谢你的时间
  • @JustinErswell 尝试我更新的 SQL(在帖子中)并确保您引用了正确的表别名。
【解决方案2】:
select distinct d.did from devices d where d.uid in
(select c.uid from comments c where 
c.pid = (select c.pid from comments c where c.cid=@recently_inserted_cid)
union
(select p.uid from posts p where 
p.pid = (select c.pid from comments c where c.cid=@recently_inserted_cid))
)
and d.uid in 
(select r.uid2 from related r where r.uid1 = 
(select c.uid from comments c where     c.cid=@recently_inserted_cid))

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多