0

我有 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 结果资源......

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

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

我正在考虑只创建 4 个单独的 sql 语句。我知道有一种方法可以做到这一点,但我尝试过的方法似乎不起作用。

感谢您的任何帮助。

在下面提供帮助后编辑

好的,所以我让它显示,但有一个小问题,当我告诉它显示 sf1 的联系信息时,它只显示 2 个条目,而应该有 13 个条目。我总共有 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'] == "")

但它似乎也没有工作。

4

1 回答 1

1

您在没有后缀的情况下多次加入 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)

当然,您必须为您想要的所有列添加 sf1.[column2] AS c1Column2、sf2.[column2] AS c2Column2、sf3.[column2] AS partnerColumn2 等等JOINS

echo mysql_error();您可以在运行后立即看到您的确切错误mysql_query()

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

于 2012-08-16T19:12:45.317 回答