簡體   English   中英

如何在mysql中使用三個表的另一個子查詢中使用子查詢?

[英]How to use a subquery inside another subquery with three tables in mysql?

我的數據庫中有三個表,請參閱下面的結構:

用戶

uid | fname | date_joined
---------------------------------
 1  | john  | 2013-08-25 01:00:00
 2  | rock  | 2013-08-26 01:00:00
 3  | jane  | 2013-08-27 01:00:00

問題

qid | uid 
---------- 
 1  |  1   
 2  |  1   
 3  |  2   
 4  |  3   
 5  |  3   
 6  |  1   
 7  |  1   
 8  |  2   
 9  |  2   

追隨者

fid | qid
---------
 1  |  2
 2  |  1
 3  |  2
 4  |  1
 5  |  2
 6  |  3
 7  |  2

用戶表包含所有與用戶相關的字段
問題表包含與外鍵uid相關的所有問題
關注者表存儲問題遵循的次數的信息

我希望我的查詢返回的是:

unique uid, 
fname
question count for each user
follower count for each user

我寫了一個查詢,它的工作正常,並按我的意願返回記錄,但是追隨者計數總是0.這是我的查詢:

SELECT 
    u.uid, u.fname, u.date_joined , 
    (SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
    (SELECT COUNT(*) FROM followers WHERE followers.qid IN ( 
        SELECT GROUP_CONCAT(qid) FROM questions WHERE questions.uid = u.uid 
        ) 
    ) AS follow_count
FROM epc_user AS u
ORDER BY follow_count DESC, question_count DESC, date_joined DESC

我嘗試了幾種不同的組合,但它們都沒有工作,也許我正在寫一個錯誤的查詢,或者它不可能在另一個子查詢中使用子查詢,無論它是什么。 我只是想知道它是否可能,如果可能的話

您可以使用聯接來獲取結果。 不需要子查詢:

select 
  u.uid, 
  u.fname, 
  u.date_joined, 
  count( distinct q.qid ) as 'question_count', 
  count( distinct f.fid ) as 'follower_count'
from users u
  left join questions q on q.uid = u.uid
  left join followers f on f.qid = q.qid
group by u.uid, u.fname, u.date_joined
order by follower_count desc, question_count desc, date_joined desc;

GROUP_CONCAT將返回一個字符串,但IN運算符使用一組值而不是字符串,所以你必須使用這樣的東西

   SELECT 
        u.uid, u.fname, u.date_joined , 
        (SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
        (SELECT COUNT(*) FROM followers WHERE followers.qid IN ( 
            SELECT qid FROM questions WHERE questions.uid = u.uid 
            ) 
        ) AS follow_count
    FROM users AS u
    ORDER BY follow_count DESC, question_count DESC, date_joined DESC

小提琴: http ://sqlfiddle.com/#!2/ 8cd10/2

暫無
暫無

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

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