0

それで、私は数日間試行錯誤して検索しており、助けを求めてここに目を向けています。

データベースのテーブルからスケジュール情報を取得して Web ページに表示するページを Web サイトに作成しました。同じ DB の 2 番目のテーブルから配色を取得しようとしています。最初のテーブルの名前が 2 番目のテーブルの名前と一致すると、その名前だけが割り当てられた別の色で表示されます。私のテーブルは次のようになります。

TBL1:
id time timeframe 月 火 水 木 金 土 日
1 12a 00:00:00 Name1 Name2 Name3 Name2 Name5 Name6 Name7
2 1a 01:00:00 Name1 Name2 Name3 Name2 Name5 Name4 Name3
3 2a 02:00:00 Name1 Name2 Name4 Name2 Name2 Name6 Name2
4 3a 03:00:00 Name2 Name2 Name4 Name2 Name3 Name3 Name2

ect

TBL2:
id 名前 色
1 名前1 #hexcolor
2 名前 2 #hexcolor2
3 名前3 #hexcolor3
ect

    $query = array('select' => "*", 
               'tbl' => "Schedule");
$query2 = array('select' => "name, color", 
               'tbl' => "dj_colors");

$name = "select t1.*, Monday.color, Tuesday.color, Wednesday.color, Thursday.color, Friday.color, Saturday.color, Sunday.color

FROM スケジュール t1 JOIN dj_colors 月曜日 ON t1.Monday = Monday.name, JOIN dj_colors 火曜日 ON t1.Tuesday = Tuesday.name, JOIN dj_colors 水曜日 ON t1.Wednesday = 水曜日.name, JOIN dj_colors 木曜日 ON t1.Thursday = 木曜日.name, JOIN dj_colors 金曜日 ON t1.Friday = Friday.name, JOIN dj_colors 土曜日 ON t1.Saturday = Saturday.name, JOIN dj_colors 日曜日 ON t1.Sunday = Sunday.name";

$DB = new DB(); $result = $DB->select_multi($query); foreach ($result as $arrayLoop) { $printout .= "<tr>"; foreach ($arrayLoop as $field => $data) { if ($field == 'id' || $field == 'TimeFrame') continue; if ($data === $name) $printout .= "<td color=".$color.">".$data."</td>"; else $printout .= "<td class='schedule4'>".$data."</td>"; } $printout .= "</tr>"; }

編集*これは私が思いついたものであり、私が望んでいるようにまだ機能していないため、まだ何かが欠けていると思います. 私は頭を悩ませ、適切な形式で使用している実際のテーブルの名前を付けました。まだ色を引っ張っていませんが、エラーは発生していません。ご容赦ください、私はまだ学んでいます。私は答えを求めているのではなく、どこを見ればいいのか、いくつかの役立つヒントを求めているだけです。

4

1 に答える 1

0

結合について学ぶ必要があると思います。色を結合することにより、名前と同じクエリで色を返すことができます。

select t1.*, mon.color, tue.color, . . . sun.color
from table1 t1 join
     table2 mon
     on t1.name = mon.name join
     tale2 tue
     on t1.tue = tue.name
     . . .
     table2 sun
     on t1.sun = sun.name 

表現:

SELECT color FROM tbl2 WHERE name

おそらく行は返されません。比較なしnameで、先頭の最初の数字に基づいて int に変換されます。英字で始まる場合は 0 に変換されますが、これは false であるため、行は返されません。

于 2013-03-31T14:19:54.913 に答える