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

我正在使用数据表创建一个表,但在其中呈现数据时遇到了一些问题。我的表结构是。


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 个类别。 提前谢谢。


元芳怎么了
浏览 56回答 1
1回答

米琪卡哇伊

您可以在应用程序层中转换数据,以便在结果数组中,您将只有表 a 的行以及相关的类别名称。首先,您需要一个有序的结果集,例如select a.id,  a.phone,  a.name,  b.category from table_1 ajoin table_2 b   on a.id = b.table_1_idorder 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 rowecho 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但它有最大字符限制(可调)的限制。
打开App,查看更多内容
随时随地看视频慕课网APP