2010-09-14 65 views
0

我不太瞭解MySQL,下面是我使用的表結構。MySQL分類中的項目

用戶

ID | first_name | last_name |用戶名 |密碼

類別

ID | user_id |名稱|說明

鏈接

ID | user_id | category_id |名稱| url |描述| date_added | hit_counter

我想回到這樣設置,以提供有關類別,包括有多少鏈接都在上面用戶信息的結果。

id | user_id |名稱|描述| link_count

目前我有這個查詢,但它只返回有鏈接的類別的行。它應該返回沒有任何鏈接的類別(空類別)的行。 。

SELECT *類別,COUNT(links.id) FROM類別LEFT JOIN ON categories.id = links.category_id鏈接;

如何做這個查詢?謝謝。

回答

2

我們不能做聚合選擇表點「星」。

你想要做什麼是一樣的東西(僞):

select 
    categories.field1, 
    categories.field2, 
    {etc.} 
    count(links.id) 
from categories 
left join links 
    on categories.id = links.category_id 
group by 
    categories.field1, 
    categories.field2, 
    {etc.} 

督察:你缺少的代碼塊組得到正確的聚集在你的查詢結果集。

+1

爲什麼我們不能做選擇表點「星」我們可以做...這個查詢將執行SELECT類別。*,COUNT(links.id)FROM categories LEFT JOIN links on categories.id = links.category_id group by categories.id; – Kandha 2010-09-14 04:24:50

+0

你當然是絕對正確的。:)但在海報的背景中指出:「我不太瞭解mysql」,我不想對聚合函數中列出的任何字段在組合框中列出更長的解釋因爲大多數人懶洋洋地寫數(*)而不是特定的字段數(字段名),就像海報的問題。所以我用一般的經驗法則來解釋:「無論你選擇什麼,按塊複製組中的那些字段」。這是一個「僞劣」的藉口,我意識到。非常抱歉。 – alien052002 2010-09-14 05:45:04

0

要塑造alien052002的答案,以適應您的具體問題,下面的(未經測試)應該工作:

select c.id, 
    c.user_id, 
    c.name, 
    c.description, 
    count(l.link_count) 
from categories c 
left join links l on l.category_id = c.id 
group by c.id, c.user_id, c.name, c.description 
0

試試這個

SELECT categories.*, COUNT(links.id) FROM categories LEFT JOIN links ON categories.id=links.category_id group by categories.id;