我有一个用作资源在线调度的数据库。数据库设置有以下表(注意:表名是第一个要点,列名在每个表名下缩进):
- 顾问
- 顾问 ID
- f_name
- l_name
- 用户名
- 密码
- 客户
- client_id
- 客户名称
- 事件类型
- event_id
- 事件类型
- event_full_name
- 计费状态
- billing_id
- 计费类型
- 日期(请注意,此表中列出了所有可用日期,但是有些日期无法用于我的目的,因此此处并未列出每一天。将其视为可用天数的清单。)
- date_id
- 日期
- 日历事件
- calendar_event_id
- 顾问 ID
- client_id
- event_id
- billing_id
- date_id
每次将顾问分配给事件时,都会将其添加到 calendar_event 表中,并calendar_event_id
创建一个新的。
在我的 PHP 页面上,我有以下查询:
$query = "SELECT * FROM billing_status, calendar_event, client, consultant, dates, event_type WHERE (consultant.consultant_id = calendar_event.consultant_id AND client.client_id = calendar_event.client_id AND event_type.event_id = calendar_event.event_id AND billing_status.billing_id = calendar_event.billing_id AND dates.date_id = calendar_event.date_id) ORDER BY calendar_event.date_id";
$consultantresults = mysql_query($query) or die ('Query failed: ' . mysql_error());
然后我显示输出如下:
echo "<html><head></head><body><table>";
while ($consultantresult=mysql_fetch_array($consultantresults))
{
$consultantname = $consultantresult[f_name];
$consultantname .= " ";
$consultantname .= $consultantresult[l_name]; // to display the first and last names together
echo "<tr style=\"background-color:#eee;\"><th>Date</th><th>" . $consultantname . "</th></tr>
<tr><td>" . date('D M d, Y', strtotime($consultantresult[date])) . "</td><td>" . $consultantresult[client_name] . " " . $consultantresult[event_type] . "</td></tr>";
}
echo "</table></body></html>";
} else {
header("Location: /index.php");
exit;
}
这可以显示calendar_event
表中包含的所有记录,但每条记录都显示在自己的行中,例如:
<table>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #1</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client A</td></tr>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #2</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client B</td></tr>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #3</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client C</td></tr>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #1</th></tr>
<tr><td>Tue Aug 06, 2013</td><td>Client D</td></tr>
</table>
您会注意到前三个条目是在同一日期(日期每次都重复),第一个和最后一个条目是针对同一个顾问(姓名也重复)。
相反,我想让表格在顶部标题行中显示每个唯一顾问的姓名,在第一列中显示每个唯一日期。在第一行/列中不应重复任何名称或日期。例如:
<table>
<tr style="background-color:#eee;"><th>Date</th><th>Consultant #1</th><th>Consultant #2</th><th>Consultant #3</th></tr>
<tr><td>Mon Aug 05, 2013</td><td>Client A</td><td>Client B</td><td>Client C</td></tr>
<tr><td>Tue Aug 06, 2013</td><td>Client D</td><td> </td><td> </td></tr>
</table>
顾问可能不会在某一天被分配,所以那一天对他们来说是空白的(我用作
占位符)。
calendar_event
我还需要为最终用户提供一种只显示特定日期的方式,而不是显示整个表格中的每个条目。
有什么想法可以修改上面的代码以使其正确显示输出吗?