2014-10-08 81 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