今週の航空機検査スケジュールを格納するために使用されるテーブルがあります。これは と呼ばれaircraft_sched
ます。関連する他の 2 つのテーブルがありaircraft_sched_options
ます。JOIN
aircraft
aircraft_sched
:
column 1: AC_Reg (VARCHAR)(10),(PK),(FK -> `aircraft` PK)
column 2: Sched_Day1 (INT)(1),(FK -> `aircraft_sched_options` PK)
column 3: Sched_Day2 (INT)(1),(FK -> `aircraft_sched_options` PK)
column 4: Sched_Day3 (INT)(1),(FK -> `aircraft_sched_options` PK)
column 5: Sched_Day4 (INT)(1),(FK -> `aircraft_sched_options` PK)
column 6: Sched_Day5 (INT)(1),(FK -> `aircraft_sched_options` PK)
column 7: Sched_Day6 (INT)(1),(FK -> `aircraft_sched_options` PK)
column 8: Sched_Day7 (INT)(1),(FK -> `aircraft_sched_options` PK)
aircraft_sched_options
:
column 1: SchedOpt_ID (INT)(1),(PK)
column 2: SchedOpt_Name (VARCHAR)(10)
column 3: SchedOpt_Color (VARCHAR)(7),
aircraft
column 1: AC_Reg (VARCHAR)(10),(PK)
column 2: AC_SN (VARCHAR)(6)
column 3: AC_Year (VARCHAR)(4)
システムに新しい航空機が追加されると、私はそれを持っているので、それもaircraft_sched
テーブルに追加されます。これが正しい方法だとは思いませんが、それが今のやり方です。そのため、aircraft_sched
テーブルには常に が入力されAC_Reg
、Sched_DayX
セルは選択したスケジュール タイプに対応する0
forNULL
または数値のいずれかになります。SchedOpt_ID
私が直面している問題はJOIN
、Sched_DayX
列を列にしようとするときですSchedOpt_ID
。列が 1 つだけの場合は機能しJOIN
ますが、複数の列を実行しようとすると、結果から行が消えてしまいます。
「一種の」動作する私のコードは次のとおりです。
<?php
$sql = ("
SELECT
*
FROM
aircraft_sched
INNER JOIN aircraft_sched_options AS aso1
ON aircraft_sched.Sched_Day1 = aso1.SchedOpt_ID
");
if(!$result_sql = $mysqli->query($sql))
{
echo QueryCheck("getting the aircraft schedule ","from the aircraft sched",$mysqli) . "Error No: " .$mysqli->errno;
}
while($ACSched = $result_sql->fetch_assoc())
{
echo "<tr>";
echo "<td class=\"ACSched_Reg\">" . $ACSched['AC_Reg'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "<td align=\"center\" style=\"background:" . $ACSched['SchedOpt_Color'] . ";\">" . $ACSched['SchedOpt_Name'] . "</td>";
echo "</tr>";
}
?>
「ある程度」機能するとは、結果として実際に何かを表示することを意味します。機能しない理由は、スケジュール タイプが割り当てられた日が 1 日しかない場合でも、各セルに同じ結果が表示されるためです。
次のように、クエリに2 番目を追加すると、次JOIN
のようになります。
$sql = ("
SELECT
*
FROM
aircraft_sched
INNER JOIN aircraft_sched_options AS aso1
ON aircraft_sched.Sched_Day1 = aso1.SchedOpt_ID
INNER JOIN aircraft_sched_options AS aso2
ON aircraft_sched.Sched_Day2 = aso2.SchedOpt_ID
");
...その後、レコードを持つ行は返されません。
JOIN
私はsとそれらがどのように機能するかを読んでいますが、問題を解決するために私が考えることができる唯一の方法はAC_Reg
、それぞれの曜日をUNIQUE
列に設定できるように、それぞれに個別のテーブルを用意することですが、私は信じていませんそれがタスクを達成するための最良の方法です。
編集:
見やすくするためのスクリーン ショットを次に示します。
aircraft_sched
:
aircraft_sched_options
:
私のコード:
画面表示: