PHP/MySQL 生成表

标签 php mysql sql laravel

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

例子:

 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>

$操作->

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 在运行时交换它们。

关于PHP/MySQL 生成表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332081/

相关文章:

php - 从一列显示多列的等效值

php - 根据字符串中的位置替换

mysql - 运行查询时是否可以在导出 .csv 文件中硬编码下拉菜单?

php - 回显 id=$id 的行数

mysql - 合并搜索结果以使用 UNION 或者是否有其他方法

sql - 如果两行具有相同的值,则返回包含特定列的最大值的行

mysql - 连接表中多行中的值并将其写入新表中的单元格

php - Laravel 5 - 如何传递 html 数据以查看

javascript - PHP POST 变量值

javascript - 将参数从 php 文件传递​​到 javascript 文件