2016-03-02 55 views
1

我有以下表格:公司,設備,項目。計數相關外鍵出錯

項目表內容鏈接到具有外鍵的設備,並且設備通過另一個外鍵鏈接到公司。

我想要什麼:

計數的鏈接項目到選定的紀錄設備表。

下面的查詢獲取的設備列表:

SELECT devices.device_id,devices.device_name 
FROM devices,company 
WHERE devices.for_id = (company.company_name='Sony') 
ORDER BY devices.device_name ASC 

結果:

id | device 
0 | Device 1 
1 | Device 2 

下面的查詢得到正確的計數:

SELECT items.rom_name , COUNT(items.rom_name) AS 'count' 
FROM items 
WHERE items.device_for_id = 1 

結果:

device | count 
Device 1 | 2 
Device 2 | 7 

它的確定到現在爲止,我想將它們合併在一起,因爲我想它作爲一個JSON響應,所以我嘗試了以下內容:

SELECT devices.device_name,devices.device_id,count(items.device_for_id) 
AS 'roms_count' 
SFROM devices,company,items 
SWHERE devices.for_id=(company.company_name='".$_GET['company_name']."') 
SORDER BY devices.device_name ASC 

結果:

Device | roms_count 
Device 1 | 15 

這裏的我的問題是,ROM數量不正確,它獲得所有記錄的總和,而且它只顯示一個設備。

device_for_id in項是外鍵。

這是什麼正確的查詢?

更新:

公司(COMPANY_ID,COM​​PANY_NAME)

設備(DEVICE_ID,設備名,for_id(國外))

項目(device_for_id(國外),rom_id,rom_name)

+0

devices.for_id是公司的FK嗎? – Tin

+0

每個項目都鏈接到一個設備,每個設備鏈接到一個公司,例如Windows 7(項目)鏈接到華碩T100(設備),該鏈接到華碩(公司)。 – Jaeger

+0

不,項目中的device_for_id是設備的外鍵,設備中的「for_id」是公司的外鍵 – Jaeger

回答

1

你錯過了GROUP BY

SELECT devices.device_name,devices.device_id,count(items.device_for_id) AS 'roms_count' 
FROM devices 
LEFT JOIN company ON company.company_id=devices.for_id 
LEFT JOIN items ON devices.device_id=items.device_for_id 
WHERE company.company_name='Sony' 
GROUP BY devices.device_name,devices.device_id 
ORDER BY devices.device_name ASC 
+0

現在所有設備的「roms_count」都是相同的。 – Jaeger

+0

您必須指定您加入設備,公司和項目的列。如果您想要更具體的答案,請向我顯示錶格的字段。 – Tin

+0

糾正我,如果我錯了,你想數據庫表結構是正確的? *英語不是我的本地人。 – Jaeger