繁体   English   中英

PHP / MySQL生成表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM