簡體   English   中英

復雜的SQL查詢,一對多關系

[英]Complex SQL query, one to many relationship

我有一個查詢,我需要得到

  1. 一只特定的狗
  2. 有關該狗的所有評論
  3. 發表每個評論的用戶
  4. 所有鏈接到狗的圖片
  5. 發布每個鏈接的用戶

我已經嘗試了幾件事,但無法弄清楚如何工作。 這就是我所擁有的(濃縮,因此您不必費力地瀏覽所有內容):

 SELECT s.dog_id,
        s.name,
        c.comment,
        c.date_added AS comment_date_added,
        u.username AS comment_username,
        u.user_id AS comment_user_id,
        l.link AS link,
        l.date_added AS link_date_added,
        u2.username AS link_username,
        u2.user_id AS link_user_id
 FROM dogs AS d
 LEFT JOIN comments AS c
 ON c.dog_id = d.dog_id
 LEFT JOIN users AS u
 ON c.user_id = u.user_id
 LEFT JOIN links AS l
 ON l.dog_id = d.dog_id
 LEFT JOIN users AS u2
 ON l.user_id = u2.user_id
 WHERE d.dog_id = '1'

這有點接近工作了,但只會返回我的第一條評論,並且第一條鏈接都作為一個大數組,包含我請求的所有信息。 每只狗有多個評論和鏈接,因此我需要它給我所有評論和所有鏈接。 理想情況下,它將返回一個帶有dog_id,名稱,注釋(注釋數組),鏈接(鏈接數組)的對象,然后注釋將包含一堆注釋,date_add,用戶名和user_id,鏈接將包含一個一堆帶有鏈接,日期添加,用戶名和用戶ID的鏈接。 即使沒有鏈接或評論,它也必須工作。

我最近剛學了mySQL的基礎知識,但這遠遠超出了我的理解。 任何幫助都會很棒。 謝謝!

如果沒有大量冗余數據發送回,則無法在1個sql查詢中查詢。 由於注釋和鏈接之間沒有關系,因此最好分開進行這些調用。

因此,總共進行了3次調用:1檢索狗數據,1檢索評論/用戶,1檢索鏈接/用戶。

SELECT d.dog_id, d.name FROM dogs AS d WHERE d.dog_id = '1';

SELECT c.comment, c.date_added AS comment_date_added,
       u.username AS comment_username, u.user_id AS comment_user_id
       FROM comments AS c LEFT JOIN users AS u ON c.user_id = u.user_id
       WHERE c.dog_id = '1';

SELECT l.link AS link, l.date_added AS link_date_added,
    u.username AS link_username, u.user_id AS link_user_id
       FROM links AS l LEFT JOIN users AS u ON l.user_id = u.user_id
       WHERE l.dog_id = '1';

這樣做的原因是,盡管您可以很好地加入dogs / comments表,但是當您開始嘗試加入鏈接時,如何將鏈接與評論關聯起來? 沒有明顯的聯接,因此您唯一的方法是使用外部聯接。 這會在您的通話中導致大量冗余數據。

同樣,這種事情使緩存變得更加容易和直觀。 以我的經驗,通常最簡單的方法是進行幾次自然查詢,而不是加入意大利面條。 :)

暫無
暫無

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

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