Я немного в порядке. Я использую WHMCS и создаю специальный отчет, но у меня возникают проблемы с одним из моих запросов. Вот обзор:
У меня есть 2 стола; tblinvoices, у которого есть суммарный, налоговый, итоговый и т. д. счета-фактуры и tblinvoiceitems, который имеет отдельные позиции, которые отображаются в счете-фактуре. Я хочу запустить запрос, который возвращает все отдельные позиции и их цену, которые я смог сделать. У меня возникают проблемы, когда я делаю «GROUP BY» и группирую результаты по номеру счета-фактуры, после чего он возвращает только первую позицию для каждого счета-фактуры. Я хочу сгруппировать их по номеру счета, поэтому в отчете есть только 1 строка. Вот мой запрос:
$query = "SELECT date_format(tblinvoices.datepaid,'%m-%d-%Y') AS datepaid, tblinvoices.userid, tblinvoices.id, tblinvoices.subtotal, tblinvoices.credit, tblinvoices.tax, tblinvoices.tax2, tblinvoices.total, tblinvoices.taxrate, tblinvoices.taxrate2, tblinvoiceitems.description, tblinvoiceitems.amount, tblinvoices.status, FROM tblinvoices INNER JOIN tblinvoiceitems ON tblinvoices.id = tblinvoiceitems.invoiceid GROUP BY tblinvoices.id"; $result = mysql_query($query); # Math Operations $statement = array(); $count = 0; if ($result !== false) { while ($data = mysql_fetch_object($result)) { $invoiceid = $data->id; $datepaid = $data->datepaid; $description = $data->description; $item_amount = $data->item_amount; $subtotal = $data->subtotal; $credit = $data->credit; $tax = $data->tax; $tax2 = $data->tax2; $total = $data->total; if ($export != true) { $client_link = '<a href=clientssummary.php?userid='.$data->userid.'>'.$data->userid; $invoice_link = '<a href=invoices.php?action=edit&id='.$data->id.'>'.$data->id; } else { $client_link = $data->userid; $invoice_link = $data->id; } if (strpos($description, 'Setup') !== false) { $setup = $item_amount; } else { $setup = 0; } if (strpos($description, 'Addon') !== false) { $addon = $item_amount; } else { $addon = 0; } if (strpos($description, 'Tax Guide: No => Yes') !== false) { $taxguide = $item_amount; } else { $taxguide = 0; } if (strpos($description, 'Reading Rack Bundle') !== false) { $reading = $item_amount; } else { $reading = 0; } if (strpos($description, 'Toolkit Bundle') !== false) { $toolkit = $item_amount; } else { $toolkit = 0; } $hosting = $subtotal - $setup - $addon - $taxguide - $reading - $toolkit; $statement[$invoiceid."_".$count] = array($datepaid,$client_link,$promo,$dtn,$company,$state,$invoice_link,$setup,$addon,$taxguide,$reading,$toolkit,$hosting,$subtotal,$credit,$tax+$tax2,$total); $count++; } } foreach ($headings AS $k=>$v) { $reportdata["tableheadings"][] = $v; } //ksort($statement); foreach ($statement AS $invoiceid=>$entry) { $reportdata["tablevalues"][] = array( $entry[0], // datepaid $entry[1], // clientid $entry[2], // promocode $entry[3], // dtn $entry[4], // companyname $entry[5], // state $entry[6], // invoiceid formatCurrency($entry[7]), // setup formatCurrency($entry[8]), // addon formatCurrency($entry[9]), // taxguide formatCurrency($entry[10]), // reading formatCurrency($entry[11]), // toolkit formatCurrency($entry[12]), // hosting formatCurrency($entry[13]), // subtotal formatCurrency($entry[14]), // credit formatCurrency($entry[15]), // tax formatCurrency($entry[16]) // total ); } mysql_free_result($result);
Я буду рад предоставить любую дополнительную информацию / код, если это поможет. Я, хотя это может быть более общий тип вопроса … спасибо!
В результате вы описываете, что ваш набор результатов будет выглядеть так:
userid | id | subtotal | credit | tax | status | desc | amount ______________________________________________________________ 1 | 1 | 20 | 0 | .7 | 1 | item1| 10 1 | 1 | 20 | 0 | .7 | 1 | item2| 10 1 | 2 | 30 | 0 | 2.1 | 1 | item3| 15 1 | 2 | 30 | 0 | 2.1 | 1 | item3| 15 1 | 3 | 10 | 0 | .7 | 0 | item1| 10 1 | 4 | 1 | 0 | .07 | 0 | item4| 1
Это то, что вы ищите?
Поэтому попробуйте group by invoice.id и invoice.userid, а затем, возможно, invoice.suptotal ….
Может возникнуть ряд проблем, если позже вы решите объединить что-либо, но это должно сделать это.