繁体   English   中英

将表链接到第二个表并将数据从第一个表多次拉到第二个表

[英]Linking a table to a second table and pulling data from the first one to the second one multiple times

我有2个表1的位置和1表的工作人员。 在位置表中,我有3个字段:contact1,contact2和partner。 我需要每个人都可以从人员表中选择姓名,电子邮件和电话号码并显示出来。 我似乎只能一次拉动一次联系。 这是我所拥有的

SELECT officelocations_tbl.*, staff_tbl.*, city_tbl.*, state_tbl.*
FROM officelocations_tbl
JOIN city_tbl ON officelocations_tbl.cityID = city_tbl.cityID
JOIN state_tbl ON officelocations_tbl.stateID = state_tbl.stateID
JOIN staff_tbl ON staff_tbl.staffID = officelocations_tbl.contact1

那只显示办公室信息和一个我希望它做这样的联系人

SELECT officelocations_tbl.*, staff_tbl.*, city_tbl.*, state_tbl.*
FROM officelocations_tbl
JOIN city_tbl ON officelocations_tbl.cityID = city_tbl.cityID
JOIN state_tbl ON officelocations_tbl.stateID = state_tbl.stateID
JOIN staff_tbl ON staff_tbl.staffID = officelocations_tbl.contact1
JOIN staff_tbl ON staff_tbl.staffID = officelocations_tbl.contact2
JOIN staff_tbl ON staff_tbl.staffID = officelocations_tbl.partner

这样做但是给我一个错误

警告:mysql_fetch_assoc():提供的参数不是..中的有效MySQL结果资源。

是否有另一种方法可以通过使用staffID并将其链接到另一个表中的三个不同字段来列出它们?

我在这里尝试了解决方案如何正确使用联接/子查询从多个表中选择数据? (PHP-MySQL),但无法识别from部分中的第二个select语句。 我也尝试了concat,它说这不是有效的sql查询,对于内部联接来说是相同的。 我正在使用php / mysql数据库。 我在上面发布的消息是使用该页面上任何示例时得到的信息。 唯一改变的是抛出错误的那一行。

我正在考虑只创建4个单独的sql语句。 我知道有办法做到这一点,但我尝试过的似乎无效。

感谢您的任何帮助。

在提供以下帮助后进行编辑

好的,所以我可以显示它,但是当我告诉它显示sf1的联系信息时出现一个小问题,它应该显示13时仅显示2个条目。我总共希望显示29个位置并非所有位置都有contact1或contact2,但是所有位置都有一个伙伴。 这是我为了反映您的建议而编辑的代码:

    $sql_locations = "SELECT officelocations_tbl.*, 
                  sf1.firstName AS c1Firstname, sf1.lastName AS c1lastName, sf1.middleInitial AS c1middleInitial, sf1.suffix AS c1suffix, sf1.accredations AS c1accredations,
                  sf2.firstName AS c2Firstname, sf2.lastName AS c2lastName, sf2.middleInitial AS c2middleInitial, sf2.suffix AS c2suffix, sf2.accredations AS c2accredations,
                  sf3.firstName AS c3Firstname, sf3.lastName AS c3lastName, sf3.middleInitial AS c3middleInitial, sf3.suffix AS c3suffix, sf3.accredations AS c3accredations,
                  city_tbl.*, state_tbl.*
                FROM officelocations_tbl
                  JOIN city_tbl ON (officelocations_tbl.cityID = city_tbl.cityID)
                  JOIN state_tbl ON (officelocations_tbl.stateID = state_tbl.stateID)
                  JOIN staff_tbl sf1 ON (sf1.staffID = officelocations_tbl.contact1)
                  JOIN staff_tbl sf2 ON (sf2.staffID = officelocations_tbl.contact2)
                  JOIN staff_tbl sf3 ON (sf3.staffID = officelocations_tbl.partner)";
                $result_loc = mysql_query($sql_locations);

                while ($db_field = mysql_fetch_assoc($result_loc)) {
                    if ($db_field['c2Firstname'] == ""){
                        print $db_field['officeName'] . "<BR>";
                        print $db_field['address1'] . "<BR>";
                        print $db_field['cityName'] . ", " . $db_field['state_abreviation'] . " " . $db_field['zipCode']."<BR>";
                        print $db_field['c1Firstname'] . " " . $db_field['c1lastName'] . " ". $db_field['c1middleInitial'] . " ". $db_field['c1suffix']. " ". $db_field['c1accredations'] . "<BR><BR><BR><BR>";
                        print $db_field['c3Firstname'] . " " . $db_field['c3lastName'] . " ". $db_field['c3middleInitial'] . " ". $db_field['c3suffix']. " ". $db_field['c3accredations'] . "<BR>";
                    }else if ($db_field['c2Firstname'] != ""){
                        print $db_field['officeName'] . "<BR>";
                        print $db_field['address1'] . "<BR>";
                        print $db_field['cityName'] . ", " . $db_field['state_abreviation'] . " " . $db_field['zipCode']."<BR>";
                        print $db_field['c1Firstname'] . " " . $db_field['c1lastName'] . " ". $db_field['c1middleInitial'] . " ". $db_field['c1suffix']. " ". $db_field['c1accredations'] . "<BR>";
                        print $db_field['c2Firstname'] . " " . $db_field['c2lastName'] . " ". $db_field['c2middleInitial'] . " ". $db_field['c2suffix']. " ". $db_field['c2accredations'] . "<BR>";
                        print $db_field['c3Firstname'] . " " . $db_field['c3lastName'] . " ". $db_field['c3middleInitial'] . " ". $db_field['c3suffix']. " ". $db_field['c3accredations'] . "<BR><BR><BR><BR>";

                    }

我确实尝试过if语句说

    if ($db_field['c1Firstname'] != "" && $db_field['c2Firstname'] == "")

但它似乎也不起作用。

您要多次加入staff_tbl而没有后缀,请尝试如下操作:

SELECT officelocations_tbl.*, 
  sf1.FirstName AS c1Firstname, 
  sf2.FirstName AS c2Firstname, 
  sf3.FirstName AS partnerFirstname, 
  city_tbl.*, state_tbl.*
FROM officelocations_tbl
  JOIN city_tbl ON (officelocations_tbl.cityID = city_tbl.cityID)
  JOIN state_tbl ON (officelocations_tbl.stateID = state_tbl.stateID)
  LEFT OUTER JOIN staff_tbl sf1 ON (sf1.staffID = officelocations_tbl.contact1)
  LEFT OUTER JOIN staff_tbl sf2 ON (sf2.staffID = officelocations_tbl.contact2)
  LEFT OUTER JOIN staff_tbl sf3 ON (sf3.staffID = officelocations_tbl.partner)

当然,您需要为来自不同JOINS所有列添加sf1。[column2] AS c1Column2,sf2。[column2] AS c2Column2,sf3。[column2] AS partnerColumn2等。

您可以使用echo mysql_error();查看确切的错误echo mysql_error(); 在您运行mysql_query()

其他读者注意事项:我已根据以下问题编辑了答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM