数据表列内的 MySQL 循环

Posted

技术标签:

【中文标题】数据表列内的 MySQL 循环【英文标题】:MySQL loop inside Datatables column 【发布时间】:2020-04-04 07:07:39 【问题描述】:

在我的数据表网格中,我使用服务器端 php 脚本加载 mysql 数据。 我需要在列内循环。 例如我目前的数据表(从 tb 订单中选择):

//product table
|  id  |      Salesman 
-----------------------------------------
|  1  |     Arthur
|  2  |     Richard
|  3  |     Patrick

由于每个订单有多个产品,我想在列内循环显示该订单的所有产品,如下所示(INNER JOIN tb products x tb order):

 |  id  |      Salesman       Products 
-----------------------------------------  
|  1  |     Arthur          | Link stabilizer |
                            | CV joint kits |
                            | Parke brake lever |

|  2  |   Richard          | Radiator hose |
                           | Park brake lever |
|  3  |   Patrick          | Radiator hose |

我尝试在“render”函数中使用 while,但没有奏效,因为 JS 是客户端。 我在“render”函数中尝试了 ajax,但总是给我一个警告:DataTables 警告:table id=user_data - Requested unknown parameter '0' for row 0, column 0.

javascript

  var dataTable = jQuery('#user_data').DataTable
(
    "processing":true,
    "serverSide":true,
    "order":[],
    "ajax":
        url:"fetch.php",
        type:"POST"
        ,
      "columnDefs":[
        "targets":[1],
        "render": function (data, type, row, meta) 
          var dados=data;
         $.ajax(
         url: "list.php",
         dataType:"json",
         type: "POST",
         data: dados: dados,
         success: function(data) console.log(data);
               )
                                           
                 ],
);

//服务器端脚本在列内循环(list.php):

<?php
include("db.php");
$dados = $_POST['dados'];

$sql1="SELECT product FROM app_order WHERE order='$dados'";
$result1=$mysqli->query($sql1);
 while($row1=mysqli_fetch_array($result1))
$product=$row1['product']; 
echo json_encode(array($product));
?>       

//fetch.php 构建整个表:

<?php
include('db.php');
include('function.php');
$query = '';
$output = array();
$query = "SELECT * FROM order ";

$statement = $connection->prepare($query);
$statement->execute();
$result = $statement->fetchAll();

$data = array();
$filtered_rows = $statement->rowCount();
foreach($result as $row)

    $sub_array = array();
    $sub_array[]= $row['order'];
    $sub_array[] = $row['salesman'];
    $sub_array[] = 'I need an array here';
    $data[] = $sub_array;

$output = array(
    "draw"              =>  intval($_POST["draw"]),
    "recordsTotal"      =>  $filtered_rows,
    "recordsFiltered"   =>  get_total_all_records(),
    "data"              =>  $data
);
echo json_encode($output);
?>

【问题讨论】:

【参考方案1】:

我用 GROUP_CONCAT 解决了这个问题,考虑了 3 个表: “app_request”作为订单的产品; “app”作为订单号; “app_product”作为产品名称。

MySQL 脚本:

SELECT a.*, GROUP_CONCAT(r.product) as product_ids, GROUP_CONCAT(p.product) as product_names FROM app 
as a LEFT JOIN app_request as r ON r.request = a.request LEFT JOIN app_product as p ON p.id = r.product;

【讨论】:

【参考方案2】:
SELECT
  productdata.id,
  student.Salesman,
  app_order.Products
FROM
  productdata
INNER JOIN app_order ON productdata.id = app_order.order
GROUP BY productdata.id;

【讨论】:

实际上,我的 SQL 脚本可以为主表提供数据(在主要问题中添加了 fetch.php)。 List.php 循环自己工作,我的困难是在 Ajax Jquery 中获取 SQL 响应。我的 ajax 调用没有从 list.php 得到任何响应。数据表在 fetch.php 中的 $sub_array[] 中构建行,我尝试了 MySQL 查询,但在数组中不起作用。 您无法获取响应,因为需要使用带有数组的 json_encode 返回响应

以上是关于数据表列内的 MySQL 循环的主要内容,如果未能解决你的问题,请参考以下文章

使用一列内的数据进行非配对t检验

fread指定列内的分隔符

SQL聚合中同一列内的多个值的不同计数

DataFrame:将列内的数组转换为 RDD[Array[String]]

拆分python中不同列中列内的字典列表

怎么用按键精灵将EXCEL表A1列内的数字逐个复制粘贴到某网页搜索框搜索