2011-04-08 129 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