2011-04-08 99 views
2

我很难抓住这一个。MySQL多对一的关系

我有主机,每一个十几行的表,并与,这实际上是与有关主机的时间表信息的表的表。

主持人有很多要点,可以根据该主持人的条件随时间转化为时间线。

如何将其转换为一个SQL查询,该查询将x 个点与它们各自的主机

例子:

Host: 
    id:1 
    address: 123.456.7.8 
    name: FooBar 
    pickles: The good kind 
    timeline: 
     Point: 
      host_id:1 
      timestamp: 123456 
      parameter: 123 
     Point: 
      host_id:1 
      timestamp: 123456 
      paramter:456 

重要:我也想限制该时间表列条目的数量。

我一直在磨这个关于这个的齿轮已经有一段时间了,我很感激一些帮助。

回答

0

你可以做一个子查询像

SELECT h.*, (SELECT COUNT(*) FROM points WHERE host = h.host) as points FROM hosts h 
0

看你的例子像

select id, address, name, pickles,timestamp,parameter from host 
left join timeline on host.id = timeline.host_id 
order by host.id 

但是,如果一台主机可以有多个occurances,我希望看到一个例子,你作为一个人已经从实例数据中得出如何与之匹配

0

select * from hosts right join timeline where host.id = timeline.host_id

将返回所有点,同一行上的主机信息。

您可以使用GROUP BY子句和COUNT函数由HOST_ID聚集和得到的点数:

select count(host_id), hosts.id from hosts right join timeline where host.id = timeline.host_id group by host.id