2016-03-09 157 views
0

我目前選擇單行(後):加入多行另一個表到另一個表的一個結果

SELECT s.id AS id,s.date,s.title,s.views,s.image,s.width,s.description,u.id AS userId,u.username,u.display_name,u.avatar, 
(select count(*) from comments where item_id = s.id and type = 1) as numComments, 
(select count(*) from likes where item_id = s.id and type = 1) as numLikes, 
(select avg(value) from ratings where showcase_id = s.id) as average, 
(select count(*) from ratings where showcase_id = s.id) as total 
FROM showcase AS s 
INNER JOIN users AS u ON s.user_id = u.id 
WHERE s.id = :id 
LIMIT 5 

然後得到該職位在一個單獨的查詢評論:

SELECT c.id as c_id,c.text,c.date,u.id as u_id,u.username,u.display_name,u.avatar 
FROM comments as c 
INNER JOIN users as u ON c.user_id = u.id 
WHERE item_id = :item_id AND type = :type 

:id:item_id是一樣的。但是,註釋返回多行,而第一個查詢返回一行 - 有沒有辦法將註釋連接到第一個查詢,或者當前的方式是否正常?

回答

0

這真的取決於您的應用程序。

如果我們談論的是從一個小型或中型的表返回的記錄數,如果查詢被執行,每天只需幾次的話,那就沒有多大意義,如果:

  1. 你使用兩個記錄集(執行兩個不同的查詢 ,然後將其結果放在一起);

  2. 您加入了兩個查詢,從註釋查詢中複製每條記錄的發佈信息;

  3. 您使用註釋構建XML並將其加入到第一個查詢(帖子記錄)中返回的記錄中。

要考慮的另一個因素是帖子和它的評論是否同時顯示。如果情況並非如此,並且註釋最初不可見,並且僅在點擊按鈕之類的操作之後才顯示,那麼出於性能原因,您應該選擇上面的第一個選項。

但是,如果發佈的評論信息必須同時顯示,那麼您應該選擇上述3個選項之一。在建模應用程序數據結構和數據庫訪問層時,哪一個更受個人喜愛。

現在,如果數據量可能會變得很大,那麼您應該深入研究一下並運行一些模擬來查找可爲您提供最佳性能的查詢。

相關問題