MySQL UNION показывает дубликаты в DataTables - PullRequest
0 голосов
/ 06 февраля 2019

Это сводит меня с ума.У меня есть две таблицы, которые содержат данные счета.У меня есть клиент, у которого есть один неоплаченный счет в каждой таблице.Я использую этот код, чтобы объединить данные из двух таблиц и получить две строки счета:

$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 .="" не был пустым.Моя вина.@ Бармар обнаружил проблему.

$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 */
  }
}

The result of var_dump()

1 Ответ

0 голосов
/ 06 февраля 2019

Нет способа получить дубликаты номеров счетов, если у вас есть GROUP BY invoice_number, поэтому код, который вы показали, не может создать этот дубликат.

Я подозреваю, что проблема в том, что вы не удалили $output, и есть некоторый предыдущий вывод с первым номером счета.Поместите:

$output = "";

перед циклом foreach.

...