数据表列内的 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.
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 循环的主要内容,如果未能解决你的问题,请参考以下文章