试图从多个表中提取并显示不同的信息

时间:2013-03-31 14:13:32

标签: php mysql join multiple-tables

所以我现在已经搜索并做了几天的反复试验,我转向这里寻求帮助。

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

TBL1:
id    time    timeframe   Mon     Tues    Wed     Thur    Fri     Sat     Sun
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    Name    Color
1     Name1   #hexcolor
2     Name2   #hexcolor2
3     Name3   #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 Schedule t1 JOIN dj_colors Monday ON t1.Monday = Monday.name, JOIN dj_colors Tuesday ON t1.Tuesday = Tuesday.name, JOIN dj_colors Wednesday ON t1.Wednesday = Wednesday.name, JOIN dj_colors Thursday ON t1.Thursday = Thursday.name, JOIN dj_colors Friday ON t1.Friday = Friday.name, JOIN dj_colors Saturday ON t1.Saturday = Saturday.name, JOIN dj_colors Sunday 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>"; }

编辑*这就是我想出来的尝试,但我想我仍然缺少一些东西,因为它仍然没有像我想要的那样工作。我走了一个头,并以正确的格式给出了我正在使用的实际表格的名称。仍然没有拉色,但我没有得到任何错误。请耐心等待,我还在学习。我不是要求答案,只是在哪里寻找和一些有用的提示。

1 个答案:

答案 0 :(得分: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,这是假的,因此不会返回任何行。