我有以下表格:公司,设备,物品。
项目表内容链接到具有外键的设备,设备与另一个外键链接到公司。
我想要的是什么:
将链接的项目计入设备表中的选定记录。
以下查询获取设备列表:
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)
答案 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