【问题标题】:MySQL UNION show duplicates in DataTablesMySQL UNION 在 DataTables 中显示重复项
【发布时间】: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


【解决方案1】:

当您拥有GROUP BY invoice_number 时,您无法获得重复的发票编号,因此您显示的代码无法生成该重复。

我怀疑问题是你没有清除$output,并且有一些先前的输出带有第一个发票号。放:

$output = "";

foreach 循环之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2012-04-29
    • 2011-12-20
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多