从多个表中提取SQL数据

时间:2019-11-21 17:18:36

标签: php html mysql sql

尝试从SQL查询中检索数据时遇到困难。

我正在HTML网站上使用PHP运行查询。

上一页的按钮带有:

href="edit_Job.php?edit=<?php echo $result->JobID;?>">Edit Job

这是使用我的工作表中的JobID将数据拉到下一页Edit_job.php

下一页的顶部我有一些PHP代码:

 if(isset($_GET['edit']))
    {
        $editid=$_GET['edit'];
    }

从Jobs表中获取数据时,我还有其他表需要提取数据。

作为概述,我有三个表,其中我需要从每个表中提取数据的数据具有外键,如下所述。

Jobs 
=======
JobID 
JobTitle
Client 
SiteName

Sites
=======
SideID
Client
Site

Clients
=======
ClientID
SiteID
ClientName
  • 客户端可以具有多个作业和站点。
  • 工作可以有多个站点。
  • 网站可以有多个工作,但只能有一个客户。

如何使用PHP从这些表中检索数据?我一直在搜索互联网,尝试过内部联接,联接,从何处选择等等。

我可以使用

在PHPMYADMIN上获得结果
SELECT Jobs.Sitename, Sites.Site FROM Jobs INNER JOIN Sites ON Jobs.Sitename = Sites.site

但这不是来自EDIT的特定信息

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您似乎需要一些many to many表来获取所需的信息。这将需要对数据库进行一些重新设计。

在多对多表中,该表仅包含您需要配对在一起的两列ID。制作这样的表:

Jobs_Sites
=======
JobID
SiteID    

Clients_Jobs
=======
ClientID
JobID

这是可以完成此任务的数据库的完整示例。

CREATE TABLE IF NOT EXISTS `Jobs` (
  `JobID` int(6) unsigned NOT NULL,
  `JobTitle` varchar(200) NOT NULL,
  PRIMARY KEY (`JobID`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `Sites` (
  `SiteID` int(6) unsigned NOT NULL,
  `SiteName` varchar(200) NOT NULL,
  `ClientID` int(6) unsigned NOT NULL,
  PRIMARY KEY (`SiteID`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `Clients` (
  `ClientID` int(6) unsigned NOT NULL,
  `ClientName` varchar(200) NOT NULL,
  PRIMARY KEY (`ClientID`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `Jobs_Sites` (
  `JobID` int(6) unsigned NOT NULL,
  `SiteID` int(6) unsigned NOT NULL,
  PRIMARY KEY (`JobID`, `SiteID`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `Clients_Jobs` (
  `ClientID` int(6) unsigned NOT NULL,
  `JobID` int(6) unsigned NOT NULL,
  PRIMARY KEY (`ClientID`, `JobID`)
) DEFAULT CHARSET=utf8;


INSERT INTO `Jobs` (`JobID`, `JobTitle`) VALUES
  (1, 'Big job'),
  (2, 'Small job'),
  (3, 'Cheap job'),
  (4, 'Difficult job');

INSERT INTO `Sites` (`SiteID`, `SiteName`, `ClientID`) VALUES
  (1, 'Park', 1),
  (2, 'City', 2),
  (3, 'Road', 1);

INSERT INTO `Clients` (`ClientID`, `ClientName`) VALUES
  (1, 'Bob'),
  (2, 'Hannah'),
  (3, 'Jimmy');

INSERT INTO `Jobs_Sites` (`JobID`, `SiteID`) VALUES
  (1, 1),
  (1, 2),
  (1, 3),
  (2, 1),
  (3, 2),
  (3, 3),
  (4, 3);

INSERT INTO `Clients_Jobs` (`ClientID`, `JobID`) VALUES
  (1, 1),
  (1, 2),
  (2, 3),
  (3, 4),
  (3, 1);

然后您可以执行以下查询:

获取职位信息

SELECT j.JobId,
       j.JobTitle,
       s.SiteID,
       s.SiteName,
       c.ClientId,
       c.ClientName
FROM Jobs j
     JOIN Jobs_Sites js ON j.JobID = js.JobID
     JOIN Sites s ON s.SiteID = js.SiteID
     JOIN Clients_Jobs cj ON cj.JobID = j.JobID
     JOIN Clients c ON c.ClientID = cj.ClientID
WHERE j.JobID = 1

结果

JobId   JobTitle    SiteID  SiteName    ClientId    ClientName
1       Big job     1       Park        1           Bob
1       Big job     2       City        1           Bob
1       Big job     3       Road        1           Bob
1       Big job     1       Park        3           Jimmy
1       Big job     2       City        3           Jimmy
1       Big job     3       Road        3           Jimmy

获取客户信息

SELECT j.JobId,
       j.JobTitle,
       s.SiteID,
       s.SiteName,
       c.ClientId,
       c.ClientName
FROM Jobs j
     JOIN Jobs_Sites js ON j.JobID = js.JobID
     JOIN Sites s ON s.SiteID = js.SiteID
     JOIN Clients_Jobs cj ON cj.JobID = j.JobID
     JOIN Clients c ON c.ClientID = cj.ClientID
WHERE c.ClientID = 2

结果

JobId   JobTitle    SiteID  SiteName    ClientId    ClientName
3       Cheap job   2       City        2           Hannah
3       Cheap job   3       Road        2           Hannah

如果这不完全是您想要的,那么应该使您指向正确的方向。