如何在php调用mysql过程中创建动态表

如何在php调用mysql过程中创建动态表,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,这不是一个重复的问题,而是一个不同的问题。 我在MySQL中创建了一个存储过程,它将(pivote)行转换为列,有n个列。我希望PHP调用该存储过程并以表格形式显示 以下是我的存储过程: CREATE DEFINER=`root`@`localhost` PROCEDURE `daily`() BEGIN SET SESSION group_concat_max_len = (7 * 1024); SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT

这不是一个重复的问题,而是一个不同的问题。 我在MySQL中创建了一个存储过程,它将(pivote)行转换为列,有n个列。我希望PHP调用该存储过程并以表格形式显示

以下是我的存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `daily`()
BEGIN SET SESSION group_concat_max_len = (7 * 1024);
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(daily_present.course = ''',
      course,
      ''', daily_present.p, NULL)) AS ',
      course
    )
  ) INTO @sql
FROM daily_present;

SET @sql = CONCAT('SELECT daily_present.date  
                    , ', @sql, ' 
                   FROM daily_present
                   group by daily_present.date
                  order by daily_present.date desc');

PREPARE stmt FROM @sql;                         
EXECUTE stmt;
DEALLOCATE PREPARE stmt;                     
END
我在下面搜索并编写了一段代码

<?php 

  //connect to database
  $connection = mysqli_connect("localhost", "root", "", "smartcard");

  //run the store proc
  $result = mysqli_query($connection, 
     "CALL daily") or die("Query fail: " . mysqli_error());

  //loop the result set
  while ($row = mysqli_fetch_array($result)){   
      echo $row[0] . " - " . + $row[1]; 
  }

?>
请帮帮我

这是表
每日显示的原始数据

date            course      p 
28/06/2014  BBAII           52/2
28/06/2014  BCOM2nd_Year    109/4
07/06/2014  BBAII           52/2
06/06/2014  BBAII           50/4
05/06/2014  BBAII           52/2
05/06/2014  BCOM2nd_Year    104/9
04/06/2014  BBAII           49/5
04/06/2014  BCOM2nd_Year    104/9
03/06/2014  BBAII           53/1
03/06/2014  BCOM2nd_Year    106/7
02/06/2014  BBAII           47/7
02/06/2014  BCOM2nd_Year    109/4
我想在html表格格式这样的结果

date            BBAII   BCOM2nd_Year
28/06/2014  52/2    109/4
07/06/2014  52/2    NULL
06/06/2014  50/4    NULL
05/06/2014  52/2    104/9
04/06/2014  49/5    104/9
03/06/2014  53/1    106/7
02/06/2014  47/7    109/4

看起来你唯一的问题是结尾的echo语句。您没有打印出$row中存储的所有值,只有前两个值——我经常忘记使用php echo添加换行符,不要忘记

:)如果使用

while($row=mysqli\u fetch\u array($result)){

echo$row[0]。“”.$row[1]。“/”$row[2]。“”.$row[3]。“
”;}

您的数据库模式是什么?我想我猜对了,但你可能需要调整它使它工作

~~ 我在这里发布了更多信息,这样我们就不会爆出评论: 如果要将数据保存在表中,可以使用:

  echo "<table><tr><td>colname</td><td>col2</td><td>col3</td></tr>";
  while (loops) { //aka for each row
      echo "<tr><td>".$row[0]."</td><td>".$row[1]."/".$row[2]."</td><td>".$row[3]."</td></tr>";
  }
  echo "</table>"; //don't forget to close the tag
echo“colnamecol2col3”;
while(循环){//aka用于每行
回显“$row[0]”.$row[1]”./“$row[2]”.$row[3]”;
}
回声“//别忘了关上标签
Echo将字符串发送到HTML文件。您可以使用php来决定输出什么以及何时输出,但只有回显的内容才会显示在浏览器上


构建一个具有动态列数的列将更加困难,但使用更多循环仍然是相同的想法。我没有看到任何数组已经有了数据库表的colname——您可以使用查询
显示列yourTableName

来处理
echo$row[0]。" " . $第[1]行。"/" . $第[2]行。“
”;}但是列和表格网格呢。我希望它是html表格格式的columnsOK,我没有看到你在表格的任何地方说你想要它。不过代码并没有那么难:(编辑一秒钟)如何做到这一点我第一次这么做。列名是动态的,它们也来自sql查询
echo“date…”在while循环之前。字符串连接现在也需要html表标记,用
echo“.$row[0]”替换旧语句。…
然后在循环时生成下一行。在while循环后,请记住关闭表
echo”“;
是否可以用工作代码编辑答案我无法使用此
echo“.$row[0]”。…
  echo "<table><tr><td>colname</td><td>col2</td><td>col3</td></tr>";
  while (loops) { //aka for each row
      echo "<tr><td>".$row[0]."</td><td>".$row[1]."/".$row[2]."</td><td>".$row[3]."</td></tr>";
  }
  echo "</table>"; //don't forget to close the tag