Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL生成表_Php_Mysql_Sql_Laravel - Fatal编程技术网

PHP/MySQL生成表

PHP/MySQL生成表,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我需要使用PHP根据数据库(mysql)中的信息生成html表。问题是我不知道该表有多少列和行(用户可以添加列和行)。我不知道如何选择特定的行“类型”。我有表格选项,选项(选项类别)。当你知道你有多少专栏时,这很容易,但是当你不知道的时候该怎么办呢?:) 例如: Size | Color | -> this will be column names(user can add many as he want), it's selected from options_cats table,

我需要使用PHP根据数据库(mysql)中的信息生成html表。问题是我不知道该表有多少列和行(用户可以添加列和行)。我不知道如何选择特定的行“类型”。我有表格选项,选项(选项类别)。当你知道你有多少专栏时,这很容易,但是当你不知道的时候该怎么办呢?:)

例如:

 Size | Color | -> this will be column names(user can add many as he want), it's selected from options_cats table, column 'name'.
现在我需要按类型选择选项(例如大小、颜色…),并将其放入正确的列中

<table class="table table-bordered">
          <thead>
            <tr>
              @foreach($ops as $op)
              <th>{{$op->title}}</th>
              @endforeach
            </tr>
          </thead>
          <tbody>
            @foreach($ops as $op)
            <tr>
              @foreach($op->options as $option)
              <td>{{$option->name}}</td>
              @endforeach
            </tr>
            @endforeach

          </tbody>
</table>
但现在的结果是:

Paper size  Orientation 
A4          A3          
Landscape   Portrait
在我意识到如何制作后,我会把“type”列放进去

编辑:
我在管理中有一个页面,我可以为该选项添加选项和类别,当我添加新的类别选项(例如纸张大小)时,将有一个输入,您可以为纸张大小添加选项,例如A4(您可以根据需要添加多个),如果我为ex.添加颜色选项类别,则需要为添加的选项输入纸张大小和颜色。我希望您现在能理解:)

这是生成列数可变的表的一种方法:

<table class="table table-bordered">
    <thead>
        <tr>Type</tr>

        <tr>
            @foreach($rows[0]['columns'] as $columns)
                <th>{{$columns['title'])}}</th>
            @endforeach
        </tr>
    </thead>
    <tbody>
        @foreach($rows as $row)
            <tr>
              <td>$rows['type']</td>
            </tr>

            <tr>
                @foreach($row['columns'] as $column)
                    <td>{{$column['value']}}</td>
                @endforeach
            </tr>
        @endforeach
    </tbody>
</table>
编辑

你在我写答案的时候发布了你的代码,你的表看起来很像我的表,即使类是一样的,只是你在使用集合,我在使用数组

编辑2

看起来您需要交换列和行。所以你有一些选择:

1) 通过SQL生成已反转的结果集。由于列的数量是未知的,您可能必须处理动态SQL,这是MySQL中的一个示例

SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT
    CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
      ' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
    ) INTO @sql
FROM Table2;

SET @sql = CONCAT('SELECT s.Student_name, ', @sql, ' 
                   FROM Table1 a
                   LEFT JOIN Table2 b 
                        ON ON a.ID = b.ID
                   GROUP   BY a.ID, a.Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
2) 向
options()
中添加更多代码,以生成包含结果的数组。基本上,你必须阅读所有的列,并使它们成为行


3) 使用Javascript在运行时交换它们。

如果您只是想知道表的列,请检查架构:使用类似的方法:
从架构中选择列名称。其中列的表名称=
。表列是按行生成的,选项中的行“名称”是列名称。很抱歉,我想我不太明白你想做什么。请添加一些示例数据和操作p说明表
options\u cats
name
列下有选项类别,其值如
size
color
等,OP希望将其作为轴心结果。您所说的
type
列在哪里/是什么?同样在
选项\u cats
表中?添加新选项时,添加所有列。例如,如果有列大小、颜色,则需要同时添加这两个,不能只添加一个。一行一个选项,带有尺寸、颜色等名称。哦!每行的列数是可变的吗?一行有两列,另一行有三列?否:)一行有相同的列数,如果您添加选项类别,例如颜色和大小,则在添加新选项时,您需要输入大小和颜色,不多也不少。我会编辑我的问题,并把我想要的,这比这容易。好的。我想我现在明白了。编辑后可以给你一些答案,这可能不会直接帮助你,但可以让你进入正确的轨道。谢谢你的帮助,我将尝试制作一些东西:)
$rows = array( 
                array(    
                        'type' => 'Car',

                        'columns' => array(
                                                array('title' => 'Color', 'value' => 'Blue'),
                                                array('title' => 'Size', 'value' => '10'),
                                            ),

                                     array(
                                                array('title' => 'Color', 'value' => 'Red'),
                                                array('title' => 'Size', 'value' => '11'),
                                            ),
                    ),

                array(    
                        'type' => 'Paper',

                        'columns' => array(
                                                array('title' => 'Color', 'value' => 'Blue'),
                                                array('title' => 'Size', 'value' => '10'),
                                            ),

                                     array(
                                                array('title' => 'Color', 'value' => 'Red'),
                                                array('title' => 'Size', 'value' => '11'),
                                            ),
                    ),

            );
SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT
    CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
      ' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
    ) INTO @sql
FROM Table2;

SET @sql = CONCAT('SELECT s.Student_name, ', @sql, ' 
                   FROM Table1 a
                   LEFT JOIN Table2 b 
                        ON ON a.ID = b.ID
                   GROUP   BY a.ID, a.Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;