计算相关外键错误

时间:2016-03-02 16:09:00

标签: mysql

我有以下表格:公司,设备,物品。

项目表内容链接到具有外键的设备,设备与另一个外键链接到公司。

我想要的是什么:

将链接的项目计入设备表中的选定记录。

以下查询获取设备列表:

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

这是我的问题,roms计数不正确,并且它获得了所有记录的总和,而且它只显示了一个设备。

items中的

device_for_id 是外键。

对此的正确查询是什么?

更新:

公司(company_id,company_name)

设备(device_id,device_name,for_id(外国))

项目(device_for_id(foreign),rom_id,rom_name)

1 个答案:

答案 0 :(得分: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