我使用mysqli_multi_query()
函数并以这样的方式获取两个查询的结果:所有第一个查询结果都是按日期排序的第一和第二查询。
这是我的疑问:
$query = "SELECT
`b`.`class_name`,
`c`.`main_code`,`c`.`account_title`,
`a`.`ledger_entry`, `a`.`balance` AS `debit`, `a`.`date`, `a`.`v.no`, `a`.`interactive_person`
FROM `vouchers` AS `a`,`classes` AS `b`, `data` AS `c`
WHERE `a`.`post_status`='yes'
AND `a`.`cancel_status`='off'
AND `a`.`type`='CP'
AND `a`.`class_id` = `b`.`class_id`
AND `a`.`account_id`=`c`.`account_code`
AND `a`.`date` BETWEEN '$fromDate' AND '$toDate';";
$query .= "SELECT
`b`.`class_name`,
`c`.`main_code`,`c`.`account_title`,
`a`.`ledger_entry`, sum(`a`.`balance`) AS `credit`, `a`.`date`, `a`.`v.no`, `a`.`interactive_person`
FROM `vouchers` AS `a`,`classes` AS `b`,`data` AS `c`
WHERE `a`.`post_status`='yes'
AND `a`.`cancel_status`='off'
AND `a`.`type`='CP'
AND `a`.`class_id` = `b`.`class_id`
AND `a`.`interactive_person`=`c`.`main_code`
AND `a`.`date` BETWEEN '$fromDate' AND '$toDate' GROUP BY `v.no`;";
这是两个查询,现在让我向您展示我使用多查询功能的方式:
if (mysqli_multi_query($con, $query)) {
do {
// Store first result set
if ($result = mysqli_store_result($con)) {
// Fetch one and one row
while ($row = mysqli_fetch_assoc($result)) {
if ($y > 700) {
$y = 30;
$pdf->AddPage();
$x = 36;
}
$y = $y + 18;
$x = 10;
$debit = 0;
$credit = $row['credit'];
if($credit==""){$credit = 0;}
$debit = $row['debit'];
if($debit==""){$debit = 0;}
$pdf->SetFont('Times', 'B', 12, '', true);
$pdf->MultiCell(70, 18, $row['date'], 1, 'L', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 70;
$pdf->SetFont('Times', '', 12, '', true);
$pdf->MultiCell(50, 18, $row['v.no'], 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 50;
$pdf->MultiCell(100, 18, $row['main_code'], 1, 'L', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 70;
$pdf->MultiCell(100, 18, $row['account_title'], 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 100;
$pdf->MultiCell(100, 18, $row['class_name'], 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 100;
$pdf->MultiCell(120, 18,$credit , 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 120;
$pdf->MultiCell(80, 18, $debit , 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
}
// Free result set
mysqli_free_result($result);
}
} while (mysqli_next_result($con));
}
一切正常,我得到的pdf输出为:
因此,现在我要做的是按“参考号”或“日期”对我获得的订单的详细信息进行排序。
我该怎么办?我可以使用任何php函数吗?还是应该更改从数据库中获取数据的技术?
答案 0 :(得分:0)
您可以修改查询语句。
例如,只需在每个SQL查询的末尾附加“ ORDER BY ref_number
ASC”即可。
ASC代表升序(从小到大),DESC代表降序(从大到小)
答案 1 :(得分:0)
直接排序数组
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $r) {
$dates[] = $r['date'];
}
array_multisort($row, SORT_ASC, $dates);
......
}
答案 2 :(得分:0)
执行查询后,将数据存储在数组中,然后对其进行排序,并按照我想要的方式工作,所以答案是
$pdf->SetFont('Times', 'B', 12, '', true);
$y = $y + 20;
$pdf->MultiCell(200, 18, 'Cash Payment Vouchers', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$y = $y + 20;
$pdf->MultiCell(70, 18, 'Date', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 70;
$pdf->MultiCell(50, 18, 'Ref.No', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 50;
$pdf->MultiCell(70, 18, 'Code', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 70;
$pdf->MultiCell(100, 18, 'Account Title', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 100;
$pdf->MultiCell(100, 18, 'Class', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 100;
$pdf->MultiCell(120, 18, 'Credit', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 120;
$pdf->MultiCell(80, 18, 'Debit', 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
if (mysqli_multi_query($con, $query)) {
do {
// Store first result set
if ($result = mysqli_store_result($con)) {
// Fetch one and one row
while ($row = mysqli_fetch_assoc($result)) {
$a[] = $row;
$vNo[] = $row['date'];
array_multisort($a, SORT_ASC, $vNo);
}
// Free result set
mysqli_free_result($result);
}
} while (mysqli_next_result($con));
array_multisort($a, SORT_ASC, $vNo);
foreach ($a as $ro) {
if ($y > 700) {
$y = 30;
$pdf->AddPage();
$x = 10;
}
$debit = 0;
$credit = $ro['credit'];
if ($credit == "") {
$credit = 0;
}
$debit = $ro['debit'];
if ($debit == "") {
$debit = 0;
}
$y = $y + 18;
$x = 10;
$pdf->SetFont('Times', 'B', 12, '', true);
$pdf->MultiCell(70, 18, $ro['date'], 1, 'L', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 70;
$pdf->SetFont('Times', '', 12, '', true);
$pdf->MultiCell(50, 18, $ro['v.no'], 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 50;
$pdf->MultiCell(100, 18, $ro['main_code'], 1, 'L', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 70;
$pdf->MultiCell(100, 18, $ro['account_title'], 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 100;
$pdf->MultiCell(100, 18, $ro['class_name'], 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 100;
$pdf->MultiCell(120, 18, $credit, 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$x = $x + 120;
$pdf->MultiCell(80, 18, $debit, 1, 'C', true, 1, $x, $y, true, 0, false, true, 0, 'T', false);
$sum += $credit;
}
}
$y = $y + 20;
$pdf->MultiCell(390, 18, 'Total :', 1, 'R', true, 1, '10', $y, true, 0, false, true, 0, 'T', false);
$pdf->MultiCell(120, 18, $sum, 1, 'C', true, 1, '400', $y, true, 0, false, true, 0, 'T', false);
$pdf->MultiCell(80, 18, $sum, 1, 'C', true, 1, '520', $y, true, 0, false, true, 0, 'T', false);
unset($a);
unset($vNo);
$sum = 0;
}
解决我的问题的主要代码是
if (mysqli_multi_query($con, $query)) {
do {
// Store first result set
if ($result = mysqli_store_result($con)) {
// Fetch one and one row
while ($row = mysqli_fetch_assoc($result)) {
$a[] = $row;
$vNo[] = $row['date'];
array_multisort($a, SORT_ASC, $vNo);
}
// Free result set
mysqli_free_result($result);
}
} while (mysqli_next_result($con));
,然后使用foreach循环从名为$ a的存储数组中获取数据