簡體   English   中英

Mysql:基於數組的多對多查詢

[英]Mysql: Many to Many query based on Array

我有一個包含4個表的數據庫:

users             following                            
-------------     --------------------------------     
| id | etc.. |    | user_id (FK) | follow_id (FK) |    


articles          article_relations 
-------------     --------------------------------
| id | etc.. |    | user_id(FK) | article_id (FK) |

用戶可以關注其他用戶,以便他們可以看到自己保存的文章。 因此,根據當前用戶ID,需要檢查他/她在“關注”表中關注的用戶。 現在將了解所關注的用戶。

根據這些關注者ID,需要檢查article_relations中在article_relations中鏈接到關注者的文章ID。 現在應該由哪些用戶保存哪些文章。

因此,現在在表格文章中,需要查詢article_ids,以保留文章保存給用戶的信息。

數據庫設計符合邏輯嗎? 在我看來,查詢“信息流”以查看您關注的用戶保存了哪些文章是非常多余的。

有人可以告訴我DB Design是否可以通過查詢來幫助我從您關注的用戶那里獲取文章,包括用戶信息嗎?

我試着直到褲子掉下來,然后搜索整個stackoverflow!

結構對我來說很好。 至於查詢,請嘗試此。 通過follow_id將下表(a)連接到article_relations表(b),然后通過article_id將其連接到article表(c),所有這些都基於當前用戶ID。

我包括虛構字段article_name和article_field,以作為您可能要從商品表中獲取的示例。

select  c.id,
        c.article_name,
        c.article_field

from    (following a 
        join article_relations b on a.follow_id = b.user_id)
        join articles c on b.article_id = c.id
where   a.user_id = current_user_id;

嘗試此查詢,它將獲得您的用戶信息以及當前用戶正在關注的人的信息,以及當前用戶正在關注的人所保存的文章。

SELECT u.*,
       fu.*,
       a.*
FROM following f
INNER JOIN users u ON u.id = f.user_id
INNER JOIN users fu ON fu.id = f.follow_id
INNER JOIN article_relations ar ON ar.user_id = f.follow_id
INNER JOIN articles a ON a.id = ar.article_id
WHERE f.user_id = <currentUserId>

只需將.*更改為每個表中所需的字段即可。

只需要為此添加用戶表(d)。

select  c.id,
        c.article_name,
        c.article_field,
        d.id

from    ((following a 
        join article_relations b on a.follow_id = b.user_id)
        join articles c on b.article_id = c.id)
        join users d on a.user_id = d.id
where   a.user_id = current_user_id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM