数据库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直接输出时不能够(除非是存储过程)。那就生成页面的时候输出。请问如何实现呢?

解决方案 »

  1.   

    如果不能用sql处理, 就只能用php处理, 你先给出表结构看看
      

  2.   

    就2张表。一个user,主要结构就是id,name 其他的密码等和这个问题无关
    另外一张表worklog,主要结构id  content  user_id  create_time ,user_id和用户表里的id关联一一对应,并且通过程序限制,每个user只能写入一条记录进入worklog表。
      

  3.   

    补充一点:是每个用户每天只能增加一条记录。或者不增加,如果的某天没有记录就显示NULL
      

  4.   

    $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;
    $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>';
      

  5.   

    感谢唠叨的回复。
    $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; 这部分内容实际上是我从数据库查询出来的结果已经有了。
      

  6.   

    查出这样的数据来应该没有问题吧name   time     log
    张三 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>';
    }
      

  7.   


    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>';
    }
    时间根据具体的再改
      

  8.   


    $grpInfo = array();
    while($row = ...)
    {
        $grpInfo[$row['name']][$row['time']][] = $row['log'];
    }
    //打印出来看看
    print_r($grpInfo);
      

  9.   

    期待更好办法。如果直接用mysql得到结果是否效率更高一点。