私は2つのmysqlステートメントを持っています。1つはスタッフ用の4つのリンクされたテーブルからすべての情報を取得します。別のテーブルにある各スタッフのタイトルを取得しようとしていますが、選択されているプライマリテーブルとは関係がないため、1ステートメントに追加できません。mysqlステートメントで約20のバリエーションを試しましたが、成功しませんでした。タイトルをプルして2番目のステートメントの変数を介して出力するように取得しましたが、すべての人に同じタイトルが付けられているため、再度ループしたときに変数が更新されていないようです。
最初のmysqlステートメントは読み取ります(簡略化されたバージョンは非常に長いです)
SELECT staff_tbl.titleID FROM staff_tbl
2番目のmysqlステートメントは次のようになります
SELECT titles_tbl.titleID, titles_tbl.titleName FROM titles_tbl WHERE titles_tbl.titleID = '" . $getTitle . "'"
変数は次のように設定されます($ row_rsOfficeLocationは最初のmysqlステートメントの結果です)
$getTitle = $row_rsOfficeLocation['titleID'];
最初のステートメントで更新するたびに2番目のステートメントで要求されたときに$getTitle変数を更新する方法を知っている人はいますか?
編集:これがデータベース構造といくつかの値です
SET FOREIGN_KEY_CHECKS = 0;
-のテーブル構造city_tbl
存在する場合はテーブルを削除しcity_tbl
ます; CREATE TABLE city_tbl
(
cityID
int(11)NOT NULL auto_increment、
cityName
varchar(255)NOT NULL、PRIMARY KEY(cityID
))ENGINE = MyISAM AUTO_INCREMENT = 83 DEFAULT CHARSET = utf8;
--city_tblの記録
INSERT INTO city_tbl
VALUES( '1'、'Aloha'); INSERT INTO city_tbl
VALUES( '2'、'Ann Arbor');
-のテーブル構造officelocations_tbl
存在する場合はテーブルを削除しofficelocations_tbl
ます; CREATE TABLE officelocations_tbl
(
locationID
int(11)NOT NULL auto_increment、
officeName
char(255)NOT NULL、
address1
varchar(285)NOT NULL、
address2
varchar(285)デフォルトNULL、
cityID
int(11)NOT NULL、
stateID
int(11)NOT NULL、
zipCode
int(11)デフォルトのNULL、
officePhone
varchar(13)デフォルトのNULL、
contact1
int(11)デフォルトのNULL、
contact2
int(11)デフォルトのNULL、
partner
int(11)デフォルトのNULL、PRIMARY KEY(locationID
)、KEY City
(cityID
)、KEY State
(stateID
)、KEY Contact1
(contact1
)、KEY Contact2
(contact2
)、KEY Partner
(partner
))ENGINE = MyISAM AUTO_INCREMENT = 31 DEFAULT CHARSET = utf8;
--officelocations_tblのレコード
INSERT INTO officelocations_tbl
VALUES( '1'、'Atlanta'、 '5555 Some Ave'、'#311'、 '3'、 '10'、 '30041'、''、null、null、 '26'); INSERT INTO officelocations_tbl
VALUES( '2'、'Austin'、 '5555 Some Ave'、''、 '4'、 '43'、 '78734'、 '555-555-1212'、 '72'、null、'81 ' );
-のテーブル構造staff_tbl
存在する場合はテーブルを削除しstaff_tbl
ます; CREATE TABLE staff_tbl
(
staffID
int(11)NOT NULL auto_increment、
staffID_C2
int(11)NOT NULL、
staffID_P
int(11)NOT NULL、
firstName
varchar(255)NOT NULL、
middleInitial
varchar(15)デフォルトNULL、
lastName
varchar(255)NOT NULL、
suffix
varchar(15)デフォルトNULL、
accredations
varchar(150)デフォルトNULL、
email
varchar(255)NOT NULL、
phone
varchar(25)NOT NULL、
mobilePhone
varchar(25)デフォルトNULL、
officePhone
varchar(25)デフォルトNULL、
faxNumber
varchar(25)デフォルトNULL、
address1
varchar(255)NOT NULL、
address2
varchar(255)デフォルトNULL、
cityID
int(11)NOT NULL、
stateID
int(11)NOT NULL、
zipCode
int(11)NOT NULL、
titleID
int(11)NOT NULL、
locationID
int(11)NOT NULL、
photoURL
varchar(255)デフォルトNULL、
vCardURL
varchar(255)デフォルトNULL、
qRCodeURL
varchar(255)デフォルトNULL、
resumeURL
varchar(255)デフォルトNULL、
biography
longtext、
dateCreated
日付NOT NULL、PRIMARY KEY(staffID
)、KEY State
(stateID
)、KEY Location
(locationID
)、KEY Title
USING BTREE (titleID
)、KEY City
USING BTREE(cityID
)、KEY Staff
USING BTREE(staffID
))ENGINE = MyISAM AUTO_INCREMENT = 102 DEFAULT CHARSET = utf8;
--staff_tblの記録
INSERT INTO staff_tbl
VALUES( '1'、 '1'、 '1'、'John'、''、'Doe'、''、''、'johndoe@someemail.com'、 '5555551212'、''、 '5555551212 '、' 5555551212'、' 5555 Some Ave。'、' Suite 8、#317'、' 21'、' 42'、' 55555'、' 3'、' 0'、''、''、''、 ''、 '1'、 '2012-08-02'); INSERT INTO staff_tbl
VALUES( '2'、 '2'、 '2'、'Jane'、''、'Doe'、''、''、'jandoe@someemail.com'、 '5555551212'、''、 '5555551212 '、' 5555551212'、' 555555 SW Some Ave'、''、' 1'、' 37'、' 55555'、' 3'、' 0'、''、''、''、
-のテーブル構造state_tbl
存在する場合はテーブルを削除しstate_tbl
ます; CREATE TABLE state_tbl
(
stateID
int(11)NOT NULL auto_increment、
state_abreviation
char(10)NOT NULL、
state_name
char(100)NOT NULL、PRIMARY KEY(stateID
))ENGINE = MyISAM AUTO_INCREMENT = 54 DEFAULT CHARSET = utf8;
--state_tblのレコード
INSERT INTO state_tbl
VALUES('51'、' DC'、' Washington DC'); INSERT INTO state_tbl
VALUES( '1'、'AL'、'Alabama');
-のテーブル構造titles_tbl
存在する場合はテーブルを削除しtitles_tbl
ます; CREATE TABLE titles_tbl
(
titleID
int(11)NOT NULL auto_increment、
titleName
varchar(255)NOT NULL、PRIMARY KEY(titleID
))ENGINE = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = utf8;
--titles_tblの記録
INSERT INTO titles_tbl
VALUES( '1'、'アソシエイトコンサルタント\r \ n'); INSERT INTO titles_tbl
VALUES( '2'、'最高財務責任者'); INSERT INTO titles_tbl
VALUES( '3'、'コンサルタント'); INSERT INTO titles_tbl
VALUES( '4'、'Director、Business Development'); INSERT INTO titles_tbl
VALUES( '5'、'LEAVE TITLE BLANK'); INSERT INTO titles_tbl
VALUES( '6'、'National Director of Information Technology'); INSERT INTO titles_tbl
VALUES( '7'、'National Director of Operations'); INSERT INTO titles_tbl
VALUES( '8'、'National Technical Director'); INSERT INTO titles_tbl
VALUES( '9'、'Partner'); INSERT INTO titles_tbl
VALUES( '10'、'地域コンサルタント'); 値に挿入titles_tbl
( ' 11'、'シニアコンサルタント'); titles_tbl
値に挿入( '12'、'副社長'); 挿入するtitles_tbl
値('13'、'プロジェクト会計士'); INSERT INTO titles_tbl
VALUES( '14'、'');
サンプル出力は次のようになります。
出力されるすべてのタイトルがすべてのスタッフメンバーで同じであるという事実を除いて、それは機能しています。私が使用しているコードは、2番目のselectステートメントで以前に投稿したコードです。titles_tblをメインのSQLステートメントに結合する方法を理解できればもっと簡単かどうかはわかりません。ユニオンから最初の選択の2番目の選択まで、いくつかのバリエーションを試しましたが、どれも機能していないか、エラーが発生します。
これは、結合のすべてのエイリアスを含めて使用した最初のSQLステートメントです。
SELECT staff_tbl.staffID, staff_tbl.staffID_C2, staff_tbl.staffID_P, staff_tbl.firstName, staff_tbl.middleInitial, staff_tbl.lastName, staff_tbl.suffix, staff_tbl.accredations, staff_tbl.email, staff_tbl.phone, staff_tbl.mobilePhone, staff_tbl.officePhone, staff_tbl.faxNumber, staff_tbl.address1, staff_tbl.address2, staff_tbl.cityID, staff_tbl.stateID, staff_tbl.zipCode, staff_tbl.titleID, staff_tbl.locationID, staff_tbl.photoURL, staff_tbl.vCardURL, staff_tbl.qRCodeURL, staff_tbl.resumeURL, staff_tbl.biography, staff_tbl.dateCreated, officelocations_tbl.locationID, officelocations_tbl.officeName, officelocations_tbl.address1, officelocations_tbl.address2, officelocations_tbl.cityID, officelocations_tbl.stateID, officelocations_tbl.zipCode, officelocations_tbl.officePhone, officelocations_tbl.contact1, officelocations_tbl.contact2, officelocations_tbl.partner, city_tbl.cityID, city_tbl.cityName, state_tbl.stateID, state_tbl.state_abreviation, state_tbl.state_name, titles_tbl.titleID, titles_tbl.titleName, contact1.firstName AS c1Firstname, contact1.lastName AS c1lastName, contact1.middleInitial AS c1middleInitial, contact1.suffix AS c1suffix, contact1.accredations AS c1accredations, contact1.phone AS c1Phone, contact1.faxNumber AS c1FaxNumber, contact1.mobilePhone AS c1Mobile, contact1.email AS c1Email, contact1.titleID AS c1Title, contact2.firstName AS c2Firstname, contact2.lastName AS c2lastName, contact2.middleInitial AS c2middleInitial, contact2.suffix AS c2suffix, contact2.accredations AS c2accredations, contact2.phone AS c2Phone, contact2.faxNumber AS c2FaxNumber, contact2.mobilePhone AS c2Mobile, contact2.email AS c2Email, contact2.titleID AS c2Title, partner.firstName AS c3Firstname, partner.lastName AS c3lastName, partner.middleInitial AS c3middleInitial, partner.suffix AS c3suffix, partner.accredations AS c3accredations, partner.phone AS c3Phone, partner.faxNumber AS c3FaxNumber, partner.mobilePhone AS c3Mobile, partner.email AS c3Email, partner.titleID AS c3Title FROM officelocations_tbl INNER JOIN staff_tbl ON staff_tbl.staffID = officelocations_tbl.contact1 INNER JOIN state_tbl ON state_tbl.stateID = officelocations_tbl.stateID INNER JOIN titles_tbl ON titles_tbl.titleID = staff_tbl.titleID INNER JOIN city_tbl ON city_tbl.cityID = officelocations_tbl.cityID LEFT OUTER JOIN staff_tbl contact1 ON (contact1.staffID = officelocations_tbl.contact1) LEFT OUTER JOIN staff_tbl contact2 ON (contact2.staffID = officelocations_tbl.contact2) LEFT OUTER JOIN staff_tbl partner ON (partner.staffID = officelocations_tbl.partner)
コードの長いセクションで申し訳ありませんが、すべてをインデントするのに1時間かかります。
編集:わかりました。mysqlステートメントを作り直して、データベースからすべての情報を取得できるようにしました。しかし、私はそれに小さな問題があります。ループの3回目の反復ごとに、リスト内の連絡先1とパートナーの場所を切り替えます。そのうちの2つを故障しているようです。したがって、3つの接点がある場合は、contact1とcontact2が切り替わり、2つの接点しかない場合は、それらの順序が切り替わります。
これが私が使用している私の新しいmysqlステートメントです。
SELECT staff_tbl.staffID, staff_tbl.firstName, staff_tbl.middleInitial, staff_tbl.lastName,
staff_tbl.suffix, staff_tbl.accredations, staff_tbl.email, staff_tbl.phone,
staff_tbl.mobilePhone, staff_tbl.officePhone, staff_tbl.faxNumber, staff_tbl.titleID,
staff_tbl.locationID, titles_tbl.titleID, titles_tbl.titleName,
officelocations_tbl.locationID, officelocations_tbl.officeName, officelocations_tbl.address1,
officelocations_tbl.address2, officelocations_tbl.cityID, officelocations_tbl.stateID,
officelocations_tbl.zipCode, officelocations_tbl.officePhone, officelocations_tbl.contact1,
officelocations_tbl.contact2, officelocations_tbl.partner, state_tbl.stateID,
state_tbl.state_abreviation, state_tbl.state_name, city_tbl.cityID, city_tbl.cityName,
officelocations_tbl.contact1 AS c1Contact, officelocations_tbl.contact2 AS c2Contact,
officelocations_tbl.partner AS c3Contact FROM staff_tbl INNER JOIN titles_tbl ON
titles_tbl.titleID = staff_tbl.titleID INNER JOIN officelocations_tbl ON officelocations_tbl.contact1 = staff_tbl.staffID OR officelocations_tbl.contact2 = staff_tbl.staffID
OR officelocations_tbl.partner = staff_tbl.staffID
OR staff_tbl.locationID = officelocations_tbl.locationID
INNER JOIN state_tbl ON state_tbl.stateID = officelocations_tbl.stateID
INNER JOIN city_tbl ON city_tbl.cityID = officelocations_tbl.cityID
私のディスプレイには、contact1、contact2、partnerがあるかどうかを確認するためのifステートメントがあります。連絡先2が空の場合は、連絡先1とパートナーのみが表示され、連絡先2が存在する場合は、3つの連絡先すべてが表示され、elseステートメントはcontact1またはcontact2がない場合はパートナーのみを表示します。これをループするphpは完全に機能するため、エラーは発生しません。エラーの原因となっているのは、まだ完全に正しくないSQLステートメントへの参照および/またはSQLステートメントです。ループごとに、ステートメントの実行を許可し、ステートメントが2番目の(存在する場合)連絡先にヒットしたときに、行を再度フェッチします。変数をstaff_idに設定して、各場所に関連付けられている正しい人をプルできるようにします。行をフェッチする前に、スタッフIDを特定の連絡先の例に設定します。
$staff_ID == $row_rsOfficeLocation['c3Contact'];
割り当ては正しく読み取られますが、何らかの理由で、スタッフIDへの割り当てを読み取る前にfetchassoc呼び出しがヒットしているようです。スタッフIDをリストの最初の名前ではなく2番目の名前に効果的に設定します。
何か案は?
phpループを含めるように編集します。
<?php do {
$staff_ID = $row_myQuery['staffID'];
?>
<ul>
<li><?php echo $row_myQuery['address1']; ?> <?php echo $row_myQuery['address2']; ?></li>
<li><?php echo $row_myQuery['cityName']; ?>, <?php echo $row_myQuery['state_abreviation']; ?> <?php echo $row_myQuery['zipCode']; ?></li>
<br />
<?php
if ($row_myQuery['c2Contact'] == "" && $row_myQuery['c1Contact'] != ""){?>
<!-- if contact 2 is empty display only contact 1 and partner -->
<!-- contact 1 information -->
<?php if ($row_myQuery['c1Contact'] != ""){
echo $staff_ID;
$staff_ID == $row_myQuery['c1Contact'];?>
<li class="emailGrey"><strong><?php echo $row_myQuery['firstName']; ?> <?php echo $row_myQuery['middleInitial']; ?> <?php echo $row_myQuery['lastName']; ?> <?php echo $row_myQuery['suffix']; ?></strong></li>
<li>Title: <?php echo $row_myQuery['titleName']; ?></li>
<li>Tel: <?php echo format_phone($row_myQuery['phone']);?></li>
<li>Fax: <?php echo format_phone($row_myQuery['faxNumber']); ?></li>
<li><a href="mailto:<?php echo $row_myQuery['email']; ?>">Email: <?php echo $row_myQuery['email']; echo $row_myQuery['staffID']; ?></a></li>
<br />
<?php }
?>
<?php if ($row_myQuery['c3Contact'] != ""){
$staff_ID == $row_myQuery['c3Contact'];
$row_myQuery = mysql_fetch_assoc($myQuery);
echo $staff_ID; ?>
<!-- partner information -->
<li class="emailGrey"><strong><?php echo $row_myQuery['firstName']; ?> <?php echo $row_myQuery['middleInitial']; ?> <?php echo $row_myQuery['lastName']; ?> <?php echo $row_myQuery['suffix']; ?></strong></li>
<li>Title: <?php echo $row_myQuery['titleName']; ?></li>
<li>Tel: <?php echo format_phone($row_myQuery['phone']); ?></li>
<li>Fax: <?php echo format_phone($row_myQuery['faxNumber']); ?></li>
<li><a href="mailto:<?php echo $row_myQuery['email']; ?>">Email: <?php echo $row_myQuery['email']; ?></a></li>
<?php } ?>
<?php }else if ($row_myQuery['c2Contact'] != ""){ ?>
<!-- if contact 2 is not empty display all contacts -->
<!-- contact 1 information -->
<?php if ($row_myQuery['c1Contact'] != ""){
$staff_ID = $row_myQuery['c1Contact'];
?>
<li class="emailGrey"><strong><?php echo $row_myQuery['firstName']; ?> <?php echo $row_myQuery['middleInitial']; ?> <?php echo $row_myQuery['lastName']; ?> <?php echo $row_myQuery['suffix']; ?></strong></li>
<li>Title: <?php echo $row_myQuery['titleName']; ?></li>
<li>Tel: <?php echo format_phone($row_myQuery['phone']);?></li>
<li>Fax: <?php echo format_phone($row_myQuery['faxNumber']); ?></li>
<li><a href="mailto:<?php echo $row_myQuery['email']; ?>">Email: <?php echo $row_myQuery['email']; ?></a></li>
<br />
<?php }
?>
<?php if ($row_myQuery['c2Contact'] != ""){
$staff_ID = $row_myQuery['c2Contact'];
$row_myQuery = mysql_fetch_assoc($myQuery);?>
<li class="emailGrey"><strong><?php echo $row_myQuery['firstName']; ?> <?php echo $row_myQuery['middleInitial']; ?> <?php echo $row_myQuery['lastName']; ?> <?php echo $row_myQuery['suffix']; ?></strong></li>
<li>Title: <?php echo $row_myQuery['titleName']; ?></li>
<li>Tel: <?php echo format_phone($row_myQuery['phone']);?></li>
<li>Fax: <?php echo format_phone($row_myQuery['faxNumber']); ?></li>
<li><a href="mailto:<?php echo $row_myQuery['email']; ?>">Email: <?php echo $row_myQuery['email']; ?></a></li>
<br />
<?php }
?>
<?php if ($row_myQuery['c3Contact'] != ""){
$staff_ID = $row_myQuery['c3Contact'];
$row_myQuery = mysql_fetch_assoc($myQuery);
?>
<!-- partner information -->
<li class="emailGrey"><strong><?php echo $row_myQuery['firstName']; ?> <?php echo $row_myQuery['middleInitial']; ?> <?php echo $row_myQuery['lastName']; ?> <?php echo $row_myQuery['suffix']; ?></strong></li>
<li>Title: <?php echo $row_myQuery['titleName']; ?></li>
<li>Tel: <?php echo format_phone($row_myQuery['phone']); ?></li>
<li>Fax: <?php echo format_phone($row_myQuery['faxNumber']); ?></li>
<li><a href="mailto:<?php echo $row_myQuery['email']; ?>">Email: <?php echo $row_myQuery['email']; ?></a></li>
<?php }
?>
<?php } else { ?>
<!-- if only partner display only partner -->
<?php if ($row_myQuery['c3Contact'] != ""){
$staff_ID = $row_myQuery['c3Contact'];
?>
<!-- partner information -->
<li class="emailGrey"><strong><?php echo $row_myQuery['firstName']; ?> <?php echo $row_myQuery['middleInitial']; ?> <?php echo $row_myQuery['lastName']; ?> <?php echo $row_myQuery['suffix']; ?></strong></li>
<li>Title: <?php echo $row_myQuery['titleName']; ?></li>
<li>Tel: <?php echo format_phone($row_myQuery['phone']); ?></li>
<li>Fax: <?php echo format_phone($row_myQuery['faxNumber']); ?></li>
<li><a href="mailto:<?php echo $row_myQuery['email']; ?>">Email: <?php echo $row_myQuery['email']; ?></a></li>
<?php }
}
} while ($row_myQuery = mysql_fetch_assoc($myQuery)); ?>