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

发布时间: 2017/4/9 21:52:15
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这不是一个重复质疑其不同。 我有存储过程,我在 MySQL 中创建列的 transpose(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]; 
  }

?>

这给我这个输出,但不是我想要什么。

2014-06-28 - 522014-06-07 - 522014-06-06 - 502014-06-05 - 522014-06-04 - 492014-06-03 - 532014-06-02 - 47

请帮我...

此表的原始数据daily_present

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

解决方法 1:

它看起来像你唯一的问题是你在尽头的 echo 语句。你不打印出所有的值存储在 $row,只是前两个 — — 和我常常忘了添加换行符 php 回声,别忘了 <br> :)如果您使用会发生什么

while($row = mysqli_fetch_array($result)){

echo $row[0] . " " . $row[1] . "/" . $row[2] . " " . $row[3] . "<br>"; }

您的数据库架构是什么?我想我猜对的话,但您可能需要调整它,使其工作。

~ ~ 我把更多的信息在这里所以我们不会爆开的评论︰ 如果你想要你的表中的数据,您可以使用︰

  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

回波将字符串发送到您的 HTML 文件。您使用 php 来决定什么,什么时候要输出,但什么呼应只将显示在浏览器上。

建设一个与动态数量的列将更难,但仍是同样的想法,与更多的循环。我没有看到任何数组在哪里你已经 colNames 为您的数据库表 — — 您可以使用该查询SHOW COLUMNS yourTableName

官方微信
官方QQ群
31647020