数据库2个表一个user表,一个worklog表,通过userid关联。left join 得到结果。类似下表
张三 2001-1-11 张三11号日志
张三 2001-1-12 张三12号日志
张三 2001-1-13 张三13号日志
李四 2001-1-11 李四11号日志
李四 2001-1-13 李四13号日志
王五 2001-1-11 王五11号日志
赵六 2001-1-15 赵六15号日志最后输出结果要是这个样子
11 12 13 14 15
张三 张三11号日志 张三12号日志 张三13号日志 NULL NULL
李四 李四11号日志 NULL 李四13号日志 NULL NULL
王五 王五11号日志 NULL NULL NULL NULL
赵六 NULL NULL NULL NULL 赵六15号日志貌似用mysql直接输出时不能够(除非是存储过程)。那就生成页面的时候输出。请问如何实现呢?
张三 2001-1-11 张三11号日志
张三 2001-1-12 张三12号日志
张三 2001-1-13 张三13号日志
李四 2001-1-11 李四11号日志
李四 2001-1-13 李四13号日志
王五 2001-1-11 王五11号日志
赵六 2001-1-15 赵六15号日志最后输出结果要是这个样子
11 12 13 14 15
张三 张三11号日志 张三12号日志 张三13号日志 NULL NULL
李四 李四11号日志 NULL 李四13号日志 NULL NULL
王五 王五11号日志 NULL NULL NULL NULL
赵六 NULL NULL NULL NULL 赵六15号日志貌似用mysql直接输出时不能够(除非是存储过程)。那就生成页面的时候输出。请问如何实现呢?
另外一张表worklog,主要结构id content user_id create_time ,user_id和用户表里的id关联一一对应,并且通过程序限制,每个user只能写入一条记录进入worklog表。
张三 2001-1-11 张三11号日志
张三 2001-1-12 张三12号日志
张三 2001-1-13 张三13号日志
李四 2001-1-11 李四11号日志
李四 2001-1-13 李四13号日志
王五 2001-1-11 王五11号日志
赵六 2001-1-15 赵六15号日志
TEXT;
$dict = array('name', 'date', 'contents');
foreach(split("\n", $s) as $r) {
$ar[] = array_combine($dict, split(' ', trim($r)));
}
/** 至此,已完成模拟读取查询结果的工作 **/foreach($ar as $r) {
$date[$r['date']] = $r['date'];
$out[$r['name']][$r['date']] = $r['contents'];
}
echo '<table><tr><th></th>';
foreach($date as $v) echo "<th>$v</th>";
echo '</tr>';
foreach($out as $n=>$r) {
echo "<tr><th>$n</th>";
foreach($date as $k) echo "<td>{$r[$k]}</td>";
echo '</tr>';
}
echo '</table>';
$s = < < < TEXT
张三 2001-1-11 张三11号日志
张三 2001-1-12 张三12号日志
张三 2001-1-13 张三13号日志
李四 2001-1-11 李四11号日志
李四 2001-1-13 李四13号日志
王五 2001-1-11 王五11号日志
赵六 2001-1-15 赵六15号日志
TEXT; 这部分内容实际上是我从数据库查询出来的结果已经有了。
张三 2001-1-11 张三11号日志
张三 2001-1-12 张三12号日志
张三 2001-1-13 张三13号日志
李四 2001-1-11 李四11号日志
李四 2001-1-13 李四13号日志
王五 2001-1-11 王五11号日志
赵六 2001-1-15 赵六15号日志 假如用 $row 表示提取的每一列$arr = array();
while($row = ...)
{
$grpInfo[$row['name']][$row['time']][] = $row
}
//打印出来看看
print_r($grpInfo);输出foreach($grpInfo as $key => $value)
{
echo $key.' ';
//11号的
echo $value['2001-1-11'].' ';
//12号的
echo $value['2001-1-12'].' ';
.
.
.
echo $value['2001-1-15'].'<br>';
}
foreach($grpInfo as $key => $value)
{
echo $key.' ';
//11号的
echo join('|',$value['2001-1-11']).' ';
//12号的
echo join('|',$value['2001-1-12']).' ';
.
.
.
echo join('|',$value['2001-1-15']).'<br>';
}
时间根据具体的再改
$grpInfo = array();
while($row = ...)
{
$grpInfo[$row['name']][$row['time']][] = $row['log'];
}
//打印出来看看
print_r($grpInfo);