2012-03-17 52 views
0

我使用多種方法在mysql錶行中插入數據:1#2#3。 1是國家ID,2是國家Id,3是城鎮ID。現在我有這張房地產列表。爲每個列表(家)我有國家/州/鎮(1#2#3)。在國家表中我有國家名單 - 國家表中我有國家名單 - 國家表中我有城鎮名單。我需要國家/州/鎮的房屋數量。我的意思是:Count DISTINCT多個mysql行查詢

USA [ 13 ] <!-- This Is equal of alabama+alaska+arizona --> 
----Alabama [8] <!-- This Is equal of Adamsville+Addison+Akron --> 
-------Adamsville [2] 
-------Addison[5] 
-------Akron[1] 
......(list of other City) 
----Alaska [ 3 ] 
-------Avondale[3] 
......(list of other City) 
----Arizona [ 2 ] 
-------College[2] 
......(list of other City) 

Lisintg表:

ID -- NAME -- LOCATION -- DATEJOIN -- ACTIVE 
1 -- TEST -- 1#2#3 -- 20110101 -- 1 
2 -- TEST1 -- 1#2#3 -- 20110101 -- 1 
3 -- TEST2 -- 1#3#5 -- 20110101 -- 1 
4 -- TEST3 -- 1#7#6 -- 20110101 -- 1 

國家表:

id  -- name 
1  -- USA 

統計表:

id  -- countryid -- name 
1  -- 1   -- albama 
2  -- 1   -- alaska 
3  -- 1   -- akron 

鎮表:

id  -- countryid -- statsid -- name 
1  -- 1   -- 1   -- adamsville 
2  -- 1   -- 1   -- addison 
3  -- 1   -- 1   -- akron 

感謝您的幫助。

+1

您的模式不完全清楚。你能發表你的表格定義嗎? – liquorvicar 2012-03-17 07:56:23

+0

添加我的國家/統計/鎮/列表我的問題。 – 2012-03-17 08:07:42

+0

你是否真的將'location'存儲爲一個由三個'#'分隔的數字串,就像你顯示'1#2#3'一樣?如果是這樣,你真的需要首先修復你的表模式。無論如何,這將是一個好的開始,因爲'selector1'和'selector2'這樣的列名沒有任何意義。 – Arjan 2012-03-17 08:23:07

回答

0

我不知道你的表模式,但你可以嘗試:

SELECT count(DISTINCT country_name) FROM `tbl_country` 

count()函數將返回行

0

的號碼,我不認爲你的模式是理想的,你應該看看改變它。

  • 您在列表中的位置字段正在做不止一件事。也許它應該存儲城鎮ID,當然你可以從中找出州和國家?
  • 您的其他表中的「選擇器」列被嚴重命名。他們是什麼?他們是否是外鍵引用其他表中的ID?如果是這樣,請將它們命名爲。

所以我認爲你試圖實現的是每個地理區域中所有不同列表的總和。如果是這樣,你應該看看SELECT...GROUP BY。像這樣的東西

SELECT location,count(*) 
FROM listings 
GROUP BY location 

這會給你一個清單,列出每個不同的位置以及它出現在清單表中的次數。

+0

這個名字可以想象。但即時通訊我的e.x選擇器= ID – 2012-03-17 08:19:40

+0

@SaimonAvazian我建議將它們重命名,所以它們很明顯,你不必解釋! – liquorvicar 2012-03-17 08:26:52