【问题标题】:MySQL loop inside Datatables column数据表列内的 MySQL 循环
【发布时间】: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);
?>

【问题讨论】:

    标签: php mysql ajax datatables


    【解决方案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 返回响应
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多