0

私は2つのテーブルを持っています。1つは場所用、もう1つはスタッフ用です。ロケーションテーブルには、contact1、contact2、partnerの3つのフィールドがあります。スタッフテーブルから名前、メールアドレス、電話番号を選択して表示するには、これらのそれぞれが必要です。一度に1つの連絡先を引っ張ることしかできないようです。これが私が持っているものです

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

これには、オフィス情報と1つの連絡先のみが表示されます。

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を使用して、別のテーブルの3つの異なるフィールドにリンクすることにより、それらを一覧表示する別の方法はありますか?

ここで解決策を試しました結合/サブクエリを適切に使用して複数のテーブルからデータを選択する方法は?(PHP-MySQL)ただし、fromセクションの2番目の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'] == "")

しかし、それもうまくいかなかったようです。

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]ASpartnerColumn2などを追加する必要がありますJOINS

echo mysql_error();実行した直後に使用して正確なエラーを確認できますmysql_query()

他の読者への注意:私は以下の質問に基づいて私の答えを編集しました

于 2012-08-16T19:12:45.317 に答える