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