简体   繁体   中英

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

I have 2 tables 1 for location and 1 for staff. In the location table I have 3 fields: contact1, contact2 and partner. I need each of these to select a name, email and phone number from the staff table and display it. I can only seem to get it to pull one contact at a time. Here is what I have

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

That only displays the office information and the one contact I want it to do something like this

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

doing this however gives me an error

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in .....

Is there another way to list them by using the staffID and linking it to the three different fields in another table?

I tried the solution on here How to select data from multiple tables using joins/subquery properly? (PHP-MySQL) but it wouldn't recognize the second select statement in the from section. I also tried the concat and it said it wasn't a valid sql query, it was the same for the inner join. I'm using php/mysql database. The message I posted above is what I kept getting when using any of the examples on that page. The only thing that changed was the line the error was being thrown on.

I was thinking of just creating 4 separate sql statements. I know there is a way to do this but the ones I've tried don't seem to work.

Thank you for any help.

Edited after assistance rendered below

ok So I got it to display but with one minor issue when I tell it to display the contact information for sf1 it is only showing 2 entries when there should be 13. I have a total of 29 locations that I want to be able to display not all locations have contact1 or contact2 but all have a partner. Here is the code I have edited to reflect your suggestions:

    $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>";

                    }

I did try to have the if statement say

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

but it didn't seem to work either.

You are joining staff_tbl multiple times without a suffix, try something like this:

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)

Of course you have to add sf1.[column2] AS c1Column2, sf2.[column2] AS c2Column2, sf3.[column2] AS partnerColumn2 and so on for all the columns you want from the different JOINS .

You can see your exact error using echo mysql_error(); right after you run mysql_query()

Note to other readers: I have edited my answer based on the question below

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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