0

所以我几天来一直在搜索和反复试验,我向这里寻求帮助。

我在我的网站上创建了一个页面,该页面从数据库的表中提取日程信息并将其显示到网页上。我试图从同一个数据库中的第二个表中提取配色方案,当第一个表上的名称与第二个表上的名称匹配时,只有该名称将以分配给它的不同颜色显示。我的表如下所示:

TBL1:
id time timeframe 周一 周二 周三 周四 周五 周六 周日
1 12a 00:00:00 名称1 名称2 名称3 名称2 名称5 名称6 名称7
2 1a 01:00:00 名称1 名称2 名称3 名称2 名称5 名称4 名称3
3 2a 02:00:00 名称1 名称2 名称4 名称2 名称2 名称6 名称2
4 3a 03:00:00 名称2 名称2 名称4 名称2 名称3 名称3 名称2

TBL2:
id 名称 颜色
1 名称1 #hexcolor
2 名称2 #hexcolor2
3 名称3 #hexcolor3
等

    $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

从时间表 t1 加入 dj_colors 星期一 ON t1.Monday = Monday.name, 周二加入 dj_colors ON t1.Tuesday = Tuesday.name, 加入 dj_colors 星期三 ON t1.Wednesday = 周三名称, 周四加入 dj_colors ON t1.Thursday = Thursday.name, 周五加入 dj_colors ON t1.Friday = Friday.name, 周六加入 dj_colors ON t1.Saturday = 周六名称, 周日加入 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 回答