2013-01-11 21 views
1

假設我有3個表格。 他們被稱爲用戶,線程,帖子。我需要知道用戶在一個sql行中創建了多少個&線程 。做這個的最好方式是什麼?加入我會做下面的事情,這是正確的/最好的方式來做到這一點?但是,我如何制定計數?正確的方法來加入表格和計數

SELECT *, 
FROM users 
LEFT JOIN threads on threads.user_id=users.user_id 
LEFT JOIN posts on posts.user_id=users.user_id 
WHERE user_id='1' 

回答

0

首先,你有流浪者逗號後SELECT *。其次,當你想要線程和帖子時,爲什麼要查詢用戶表?第三,爲什麼是(是嗎?)user_id a char

SELECT COUNT(user_id) FROM threads WHERE user_id='1' 
SELECT COUNT(user_id) FROM posts WHERE user_id='1' 

如果您希望在一個查詢中使用,請使用UNION

-1
SELECT 
    COUNT() as posts, 
    FROM users 
    LEFT JOIN threads on threads.user_id=users.user_id 
    LEFT JOIN posts on posts.user_id=users.user_id 
    WHERE user_id='1' 
+3

您的點數不正確...... – Ben

3

你可以使用這樣的事情,其應用和聚合函數來獲得總數:

SELECT u.user_id, 
    coalesce(TotalThreads, 0) + coalesce(TotalPosts, 0) Total 
FROM users u 
LEFT JOIN 
(
    select user_id, count(thread_id) TotalThreads 
    from threads 
    group by user_id 
) t 
    on t.user_id=u.user_id 
LEFT JOIN 
(
    select user_id, count(post_id) TotalPosts 
    from posts 
    group by user_id 
) p 
    on p.user_id=u.user_id 
WHERE u.user_id='1' 

如果你想分隔值,則:

SELECT u.user_id, 
    coalesce(TotalThreads, 0) TotalThreads, 
    coalesce(TotalPosts, 0) TotalPosts 
FROM users u 
LEFT JOIN 
(
    select user_id, count(thread_id) TotalThreads 
    from threads 
    group by user_id 
) t 
    on t.user_id=u.user_id 
LEFT JOIN 
(
    select user_id, count(post_id) TotalPosts 
    from posts 
    group by user_id 
) p 
    on p.user_id=u.user_id 
WHERE u.user_id='1' 
+2

我更喜歡這個答案,因爲它可以工作。 – Zane

-1

將這工作?

SELECT COUNT (*) FROM users u, thread t, posts p WHERE t.user_id=u.user_id AND p.user_id=u.user_id AND user_id='1'

我不熱的SQL ...

+1

-1一個問題不能成爲答案。 –

+0

是真實的,但一個想法可能會有所幫助。 – SpaceCowboy

+1

使用評論部分。或者嘗試一下你的想法,確保它有效,然後給出答案。 –

0

你基本上沒有。因爲countaggregate function,你可以簡單地組由user_id

select users.user_id as [User ID] 
,count(threads.user_id) as [Number of Threads] 
,count(posts.user_id) as [Number of Posts] 
from users 
left join threads on threads.user_id = users.user_id 
left join posts on posts.user_id = users.user_id 
where user_id = '1' 
group by users.user_id 

這樣,你的where條款變得可選。如果您想要所有用戶的明確列表及其相應的主題/帖子數,您可以將其刪除。

+0

如果您只有一個user_id,則不需要。你因爲'WHERE'而做。 –

+0

@BartFriederichs是的,這就是爲什麼我說'where'是可選的。如果要有多個用戶,只需將其刪除即可根據user_id(或任何其他列,如用戶名)將其全部分組,或者您可以針對特定用戶,就像他們在這種情況下所做的那樣。 –

+0

我錯過了那句話。你是對的。 –