为了账号安全,请及时绑定邮箱和手机立即绑定

如何从不同的表呈现数据表中单元格中的多行?

如何从不同的表呈现数据表中单元格中的多行?

PHP
元芳怎么了 2023-10-22 21:01:50
我正在使用数据表创建一个表,但在其中呈现数据时遇到了一些问题。我的表结构是。TABLE_1|------|------|-------||  ID  | NAME | PHONE ||------|------|-------|TABLE_2|------|------------|----------||  ID  | TABLE_1_ID | CATEGORY ||------|------------|----------|这是我的PHP代码$db  = new Database; // Database connection$sql = "SELECT a.*, b.* FROM TABLE_1 a, TABLE_2 b WHERE a.ID = b.TABLE_1_ID";$exe = $db->select($sql);$result = array();foreach ($exe as $rows) {    $result[] = $rows;}echo json_encode($result);这是我的JavaScript$('#example').DataTable({    ajax: {        url:"data.php",        dataSrc:""    },    columns: [        {data:"NAME"},        {data:"CATEGORY"}    ]});到目前为止,一切正常,数据已完美加载。但问题是,假设我只有一行和 5 行,因此我的数据表生成 5 行,但我希望所有类别都在一个单元格中,我只想要一行而不是 5 行。TABLE_1TABLE_2TABLE_1.ID = TABLE_2.TABLE_1_ID我正在考虑在渲染函数中做一些事情,例如$('#example').DataTable({    ajax: {        url:"data.php",        dataSrc:""    },    columns: [        {data:"NAME"},        {            data:"ID",            render: function(data, type, row){                // Some stuff to render 5 Category in a single cell                // Using the ID from row.ID (maybe)                // how to return 5 CATEGORY in this cell            }        }    ]});但我真的不知道这个过程,谷歌+堆栈溢出+数据表论坛对我来说有点混乱,因为我不擅长Javascript。 你们能帮我做到这一点吗?我必须在渲染功能中编写什么类型的代码或代码才能在单个单元格中显示 5 个类别。 提前谢谢。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您可以在应用程序层中转换数据,以便在结果数组中,您将只有表 a 的行以及相关的类别名称。


首先,您需要一个有序的结果集,例如


select a.id,

  a.phone,

  a.name,

  b.category 

from table_1 a

join table_2 b 

  on a.id = b.table_1_id

order by a.id asc

然后遍历所有记录并烘焙数据集


$result = [];

$currentParent = false;

$data = null;

foreach ($rows as $row) {

    /* 

     * if id is changed then its a different record

     * prepare data for new row and create a comma separated string of category names

     */

    if ($currentParent != $row['id']) {

        if($data != null){ // for first and intermediate rows

            $result[]= $data;

        }

        $data = ['name'=> $row['name'], 'category'=> ''];

        $currentParent = $row['id'];

    }

    $data['category'] = empty($data['category']) ? $row['category']: $data['category'] .", ". $row['category'];

}

$result[]= $data; // add data for last row

echo json_encode($result);

生成的数组将如下所示


Array

(

    [0] => Array

        (

            [name] => item 1

            [category] => Cat 1, Cat 2, Cat3

        )


    [1] => Array

        (

            [name] => item 2

            [category] => Cat 1, Cat 2, Cat3

        )


    [2] => Array

        (

            [name] => item 3

            [category] => Cat 1, Cat 2, Cat3

        )


)

另一种速记方法但不优选是在查询级别应用聚合方法,例如如果您使用 MySQL,您可以使用group_concat但它有最大字符限制(可调)的限制。


查看完整回答
反对 回复 2023-10-22
  • 1 回答
  • 0 关注
  • 54 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信