简体   繁体   English

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

[英]How to render multiple row in a cell in Datatables from a different table?

I am creating a table using datatables and I am having some trouble rendering data in it.我正在使用数据表创建一个表,但在其中呈现数据时遇到了一些问题。 My Table structures are.我的表结构是。

TABLE_1
|------|------|-------|
|  ID  | NAME | PHONE |
|------|------|-------|
TABLE_2
|------|------------|----------|
|  ID  | TABLE_1_ID | CATEGORY |
|------|------------|----------|

This is my PHP code这是我的 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);

This is my JavaScript这是我的 JavaScript

$('#example').DataTable({
    ajax: {
        url:"data.php",
        dataSrc:""
    },
    columns: [
        {data:"NAME"},
        {data:"CATEGORY"}
    ]
});

Up to this point everything is working fine, the data is perfectly loaded.到目前为止一切正常,数据已完美加载。 But the problem is, suppose I have only one row in TABLE_1 and 5 rows in TABLE_2 where TABLE_1.ID = TABLE_2.TABLE_1_ID and bcoz of this my datatable is generating 5 rows but I want all the categories in a single cell and I want only one row instead of 5.但问题是,假设我在TABLE_1中只有一行,在TABLE_2中只有 5 行,其中TABLE_1.ID = TABLE_2.TABLE_1_ID和 bcoz 我的数据表正在生成 5 行,但我希望所有类别都在一个单元格中,我只想要一排而不是 5 排。

I am thinking of doing some stuff inside the render function, like我正在考虑在渲染 function 中做一些事情,比如

$('#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
            }
        }
    ]
});

But I really don't know the process and google + stackoverflow + datatables forum is little bit confusing for me bcoz I am not good in Javascript. Can you guys help me achieve this?但我真的不知道这个过程,google + stackoverflow + datatables 论坛对我来说有点混乱,因为我在 Javascript 中表现不佳。你们能帮我实现这个吗? What type of code or what code I have to write inside the render finction to display 5 CATEGORY in a single cell.我必须在渲染函数中编写什么类型的代码或什么代码才能在单个单元格中显示 5 个类别。 Thanks in advance.提前致谢。

You can transform your data in your application layer so that in resultant array you will have only rows for table a along with related category names.您可以在应用程序层中转换数据,以便在结果数组中只有表 a 的行以及相关的类别名称。

First you need an ordered result set like首先,您需要一个有序的结果集,例如

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

Then loop through all records and cook your data set然后遍历所有记录并烹调你的数据集

$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);

The resultant array would look like结果数组看起来像

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
        )

)

Another shorthand way but not preferred is to apply aggregate methods on query level like if you are using MySQL you can use group_concat but it has a restriction of max character limit (which is adjustable).另一种但不是首选的速记方法是在查询级别应用聚合方法,例如如果您使用的是 MySQL,则可以使用group_concat ,但它有最大字符限制(可调整)的限制。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 DataTables - 如何从特定行获取单元格? - DataTables - How to get cell from specific row? jQuery 数据表 - select 来自不同页面的多行 - jQuery Datatables - select multiple row from different pages 如何从Datatables中的render函数返回多个值? - How do I return multiple values from render function in Datatables? 如何使用PHP偏移HTML表以从不同列的第二行单元格值中减去第一行的单元格值 - How To offset an HTML table with PHP to Subtract cell value of 1st row from 2nd row cell value of different columns 如何从 API 渲染表格行 - How to Render Table Row from an API DataTables 拆分数组值并呈现到单个子行中的多表 - DataTables split array value and render to multi table in single child row 如何从行中的下拉列表中单击的jQuery数据表中的单元格获取值 - How do i get a value from a cell in jquery datatables clicking on dropdown inside a row DataTables - 从不同JavaScript文件中创建的HTML表中删除DataTable - DataTables - Remove DataTables from HTML Table created in different JavaScript File 如何在dataTables的localstorage中删除表中的特定行 - How to delete specific row in table in localstorage in dataTables 如何在不重新绘制表的情况下更新数据表中的行? - how to update a row in datatables without table redraw?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM