[英]PHP / MySQL generate table
我需要使用PHP根据数据库(mysql)中的信息生成html表。 问题是我不知道该表有多少列和行(用户可以添加列和行)。 我不知道如何选择特定的行“类型”。 我有表选项options_cats(options Categories)。 当您知道自己有多少列时很容易,但是当您不知道时该怎么办? :)
例:
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>
$ ops->
public function options($prod_id) {
$data = array();
$cats = DB::table('options_cats')->where('prod_id', $prod_id)->get();
foreach ($cats as $cat) {
$cat->options = DB::table('options')->where('category', $cat->id)
->where('prod_id', $cat->prod_id)->get();
$data[] = $cat;
}
return $data;
}
但是现在的结果是:
Paper size Orientation
A4 A3
Landscape Portrait
在我意识到如何做到这一点之后,我将把列“类型”放入。
编辑:我在管理中有一页,可以在其中添加选项和该选项的类别,当我添加新的类别选项(例如纸张尺寸)时,会有输入,您可以在其中添加纸张尺寸的选项。 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>
要使用相同的代码,您将需要使用如下数据生成一个数组:
$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'),
),
),
);
编辑
您在我写我的答案时发布了代码,并且您的表看起来非常像我的,即使类是相同的,也就是您使用的是集合,而我使用的是数组。
编辑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在运行时交换它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.