php - SQL PHP 连接 4 个表

标签 php mysql sql

我看了看,就是想不通。

以下是我要实现的目标:

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 JOINRIGHT JOIN

在性能方面,您应该使用 UserId 来连接 usersjobs 表。通过默认查找匹配 MySQL 获取有限数量的位数据来查找匹配键,使用字符串,您可以在每次搜索迭代中容纳更少的元素。当不使用主键进行连接时,请确保在连接列上创建索引

最后,安全方面,你应该依赖 parametrized queries而不是在查询字符串中使用变量

关于php - SQL PHP 连接 4 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567434/

相关文章:

mysql - sql - @curRow 基于列

php - 函数的数组结果作为 Drupal 选择选项中的选项

php - 期望 SELECT COUNT(DISTINCT country) 返回 46 但只得到 1

php - 组合两个 While 和 sql 语句

mysql - 共享数据的一致性,使陈旧数据对象的写入无效

mysql - SQL Group By 组 n?

javascript - 函数返回 bool 时如何使用不同的 SweetAlert?

php - 如何在 joinWith() yii2 中获取基表列

mysql - SQL:只有当该值为空时,如何才能更新列上的值?

mysql - 选择查询以将日期格式显示为 mmm dd yyyy hh :mm am in SQL server 2008