我看了看,就是想不通。
以下是我要实现的目标:
JobID AssignedTo SchDate ContractNo VisitNo Equipment SiteName SiteContact SiteAddress SiteTel AddedBy
1 Mark 220314 1 12 3500 Tesco Joe 21 spooner 123455 Admin
当我使用以下查询时,当我应该只有一个结果时,它如何创建 2 个结果:
SELECT j.JobID, j.CompletedBy, u.NameUser, j.SchDate, j.CustID, j.ContractNo, j.VisitNo,
s.EqName, si.SiteName, si.SiteContact, si.SiteAddress, si.SiteTele
FROM jobs j, systypes s, users u, site si
WHERE j.CompletedBy ='0' AND j.AssignedTo='$mytechname' AND j.SysTypeID=s.SysTypeID
AND j.SiteID=si.SiteID
以下是正在使用的表格:
工作
JobID completedBy AssignedTo SchDate CustID ContractNo VisitNo SysTypeID SiteID AddedBy
1 0 1 220314 1 1 12 1 1 2
网站
SiteID CustID SiteContact SiteName SiteAddress SiteTel
1 1 Ann Jones Tesco 21 spooner 123455
2 2 John Hulson tele 54 vic st 443212
系统类型
SysTypeID EqCode EqName
1 350 3500
2 450 4500
用户
UserID NameUser UserName UserPass
1 Mark mmc 1234
2 Admin Admin 1234
我认为我走在正确的轨道上,我只需要一些指导。
如果您有任何问题,请提出,在此先感谢。
结果
Count: 2 JobID: 1 CompletedBy: 0 AssignedTo: Mark McGuinness SchDate: 22/03/2014 CustID: 1 ContractNo: 12 VisitNo: 4 Equipment Name: 3500 SiteName: Tesco SiteContact: Ann Jones SiteAddress: 21 Good Street Glasgow G14 4CA SiteTele: 1413216545
Count: 2 JobID: 1 CompletedBy: 0 AssignedTo: Admin SchDate: 22/03/2014 CustID: 1 ContractNo: 12 VisitNo: 4 Equipment Name: 3500 SiteName: Tesco SiteContact: Ann Jones SiteAddress: 21 Good Street Glasgow G14 4CA SiteTele: 1413216545
最佳答案
这是应该让你开始的基本查询
SELECT j.JobID, j.CompletedBy, u.NameUser, j.SchDate, j.CustID,
j.ContractNo, j.VisitNo,s.EqName, si.SiteName, si.SiteContact,
si.SiteAddress, si.SiteTele
FROM jobs as j
INNER JOIN users as u
ON j.AssignedTo = u.NameUser
INNER JOIN sites as si
ON j.CustId = si.CustId
INNER JOIN systypes as s
ON j.SysTypeID = s.SysTypeID
WHERE j.CompletedBy ='0'
AND j.AssignedTo='$mytechname'
关于该解决方案的一些提示:
INNER JOIN
:仅当当前行在连接表中有匹配行时,此命令才会在您的行集中添加一行。如果你想在没有匹配行的情况下包含数据,请使用 LEFT JOIN
或 RIGHT JOIN
在性能方面,您应该使用 UserId
来连接 users
和 jobs
表。通过默认查找匹配 MySQL 获取有限数量的位数据来查找匹配键,使用字符串,您可以在每次搜索迭代中容纳更少的元素。当不使用主键进行连接时,请确保在连接列上创建索引
最后,安全方面,你应该依赖 parametrized queries而不是在查询字符串中使用变量
关于php - SQL PHP 连接 4 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567434/