2014-10-08 57 views
0

我是全新的mysql,所以請原諒我在這裏的知識水平,並隨時指導我在更好的方向,如果我正在做的是超出日期。大型Mysql查詢(加入結果並修改字符串)

我從數據庫中提取信息來填寫一個php頁面。

我的表:

服務器:

|ServerID (int) | ArticleID (int) | locationID (int) | 
| 1   |  46  | 55    | 
| 2   |  11  | 81    | 
| 3   |  81  | 46    | 
| 4   |  55  | 11    | 
| 5   |  81  | 99    | 
| 5   |  11  | 52    | 

文章:

|ArticleID (int) | Name (varchar) | Typ (int) | 
| 46   | domain  | 0   | 
| 81   | root-server | 1   | 
| 55   | vserver  | 2   | 
| 11   | root-server2 | 1   | 

地點:

|LocationID (int) | location (varchar) | 
| 46   | 1-5-15-2   | 
| 81   | 1-5-14-2   | 
| 55   | 2-25-1-9   | 
| 11   | 21-2-5-8   | 
| 99   | 17-2-5-8   | 
| 52   | 1-8-5-8   | 

結果:

|location (int) | name (varchar) | count (int) | 
| 1    | root-server | 1   | 
| 1    | root-server2 | 2   | 
| 17   | root-server | 1   | 

結果中的位置是位置表中位置的第一個數字塊(1-5-15-2 - > 1,1-8-5-8 - > 1,21-2-5 -8→21,17-2-5-8→17)。 計數是具有相同名稱和相同第一個位置塊的所有服務器的總和。

有人認爲只有一個查詢纔有可能得到這個結果嗎?

感謝您的任何答案!

+0

在那裏每個那些更多項目表?看起來你有外鍵作爲主鍵?什麼是類型?爲什麼它不在結果中?此外,爲什麼在結果中的位置1 1 17,在您的示例中不存在 – 2014-10-08 12:44:08

+0

@naturalc是每個表中都有更多的項目。服務器表有20000個項目和文章表500.女巫類型?結果中的位置是位置表中位置的第一個塊。 (1-5-15-2→1,1-8-5-8→1,21-2-5-8→21,17-2-5-8→17) – TobsA13 2014-10-08 12:54:20

回答

0

入住這

SELECT SUBSTRING_INDEX(location, '-', 1) as LID,Article.Name,Count(*) as Count 
from Location join Server 
on Server.locationID=Location.locationID 
join Article on Article.ArticleID=Server.ArticleID 
group by LID,Article.ArticleID ; 

DEMO

0

請這給了一槍:

SELECT 
    s.locationID as id, a.name, count(*) as count 
FROM 
    `Server` s 
    LEFT JOIN 
    `Article` a ON s.ArticleID = a.ArticleID 
GROUP BY s.locationID, a.name 
0

這樣的事情應該工作

select 
    s.location_id as location, a.name, count(location) as count 
from 
    server as s, article as a 
where 
    s.articleID = a.articleID 
group by location, a.name