2016-03-02 24 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