数据显示来自4表mysql

时间:2013-08-23 13:05:50

标签: php mysql

如何在vendorID的基础上显示所有表中的公共数据,其中vendorID是我的供应商表中的唯一键。我使用它作为所有其他(费用表,小时表,员工表,临时表和)表的foriegn键。

这是我的费用表 struructre cost 这是我的小时表结构 hour 这是我的 Temporarytable 结构 enter image description here 这是我的员工表 employee table

这是我的最终表供应商有vendorID是唯一的Key enter image description here

我使用了以下查询,但它显示的是不同的数据。

SELECT * FROM cw_employee_csv as emp 
inner join cw_cost_hour as cost on cost.vendorid=emp.vendorid 
inner join cw_temp_employee as temp on cost.vendorid=temp.vendorid 
inner join cw_hour_company as hour on temp.vendorid=hour.vendorid 
inner join cw_vendor as vendor on temp.vendorid=vendor.vendorid 
where vendor.companyid=1 ORDER BY hour.timeFrom ASC

1 个答案:

答案 0 :(得分:0)

如果我理解,试试这个:

在您的查询字段中列出要显示的显式字段,例如:

SELECT 
    emp.assignmentid, cost.bill_type 
FROM 
    cw_employee_csv AS emp 
INNER JOIN 
    cw_cost_hour AS cost ON cost.vendorid = emp.vendorid 
INNER JOIN 
    cw_temp_employee AS temp ON cost.vendorid = temp.vendorid 
INNER JOIN 
    cw_hour_company AS hour ON temp.vendorid = hour.vendorid 
INNER JOIN 
    cw_vendor AS vendor ON temp.vendorid = vendor.vendorid 
WHERE
    vendor.companyid = 1 
ORDER BY 
    hour.timeFrom ASC

如果表的基数不同并且您希望每个供应商只显示一行,则必须使用cw_vendor编写主查询并使用某个子查询来检索其他表的其他信息。显然,关于供应商表的父表,您可以使用INNER JOIN信息而不使用子查询。

评论后编辑:

您从此查询开始(在聊天讨论之后):

我按公司提取汇总(我想按供应商汇总您的成本,如果您想应用另一个公式,则它是相同的算法)

select 
    sum(t.vendor_cost), t.companyid
from 
    (select 
         vendor.companyid as companyid, vendor.id as vendorid,
         (select SUM(c.cost)
          from cw_cost_hoyr c
          where c.vendorid = vendor.id) as vendor_cost
     from 
         cw_vendor vendor) as t
group by 
    t.companyid

现在我们添加其他信息,但我必须了解你对他们的关系有什么要求