【发布时间】:2019-06-29 18:59:39
【问题描述】:
这快把我逼疯了。 我有两个包含发票数据的表。 我有一位客户在每张桌子上都有一张未付款的发票。 我使用此代码连接两个表中的数据并获取两个发票行:
$stmt = $db->prepare ("
SELECT invoice_id, invoice_number, customer_id, paid
FROM
(
SELECT invoice_id, invoice_number, customer_id, paid FROM tbl_invoices
UNION ALL
SELECT invoice_id, invoice_number, customer_id, paid FROM tbl_invoices_el
)
tbl_invoices
WHERE customer_id = $customer_id
AND paid = '0'
GROUP BY invoice_number
");
代码在 phpMyAdmin 中运行良好,结果是两行数据。
在页面上,我使用 Bootstrap + DataTables 在模式窗口中显示结果。奇怪的是:无论我怎么尝试,第一张发票都重复了两次。正如我之前所说的,代码在 phpMyAdmin 中运行良好,提取结果的var_dump() 显示两个数组,正如预期的那样。我在这里做错了什么?
更新 $output .=""不是空的。我的错。 @Barmar 发现了问题。
$stmt->execute();
$all_result = $stmt->fetchAll();
$total_rows = $stmt->rowCount();
if ( $total_rows > 0 )
{
foreach ($all_result as $row )
{
/* $output .=" ........... removed */
echo "
<tr style='font-size:13px;'>
<td width='5%'>
<div class='form-check' style='margin-bottom:0px'>
<label class='form-check-label'>
<input data-attr='" .$row['invoice_number']. "' id='" .$row['invoice_id']. "' class='form-check-input' type='checkbox' value='" .$customer_id. "'>
<span class='form-check-sign'>
<span class='check'></span>
</span>
</label>
</div>
</td>
<td width='15%'>".$row['invoice_number']."</td>
</tr>
";
/* echo $output; ........... removed */
}
}
【问题讨论】:
-
没有聚合的 GROUP BY 几乎总是一个错误,您希望 GROUP BY 做什么?此外,由于使用 GROUP BY 保证您不会有重复的 invoice_number 值,我只能得出结论/猜测问题出在代码中省略的 php 循环中。
-
如果只有 MySQL 会实现
DISTINCT ON (invoice_number), invoice_id customer_id, paid(PostgreSQL 语法)以在 MySQL/MariaDB 中消除重复,您可以模拟/模拟 that PostgreSQL syntax (post off me).. -
但为了获得更好的帮助,我建议您将示例数据发布为文本格式的数据(无图像)和预期结果,以便您获得更好的帮助。见Why should I provide an MCVE for what seems to me to be a very simple SQL query?
-
@Uuerdo - 你说得对,删除
GROUP BY invoice_number不会改变输出我用循环更新了我的代码。就在数据进入 DataTables 之前,输出是正确的。 -
@Uueerdo - 向我建议关于省略的 php 循环的好主意,不知何故,解决方案来自您的评论。不幸的是,我无法发表评论。谢谢。
标签: mysql datatables duplicates union rows