2016-09-05 58 views
0

我正在查询由前雇员构建的数据库,非常糟糕!我已经成功地收集并输出了我需要的所有数据 - 但是我想将数据分组为问题编号。从MySQL查询返回的分组结果

目前的输出是这个样子......

Company 1 
Issue number: 142 
Total: 480.00 

Company 2 
Issue number: 142 
Total: 46 

Company 3 
Issue number: 142 
Total: 240.00 

Company 4 
Issue number: 142 
Total: 420.00 

Company 5 
Issue number: 142 
Total: 468.00 

Company 6 
Issue number: 142 
Total: 252.00 

我想它念想......

**Issue number: 142** 
Company 1 Total 480 
Company 2 Total 468 
etc etc I.e grouping them into issue numbers. 

这里是我的代码...

$sql = " 
SELECT bf_total_cost 
    , bf_date_added 
    , ib_issue_number 
    , companyname 
    , contacts_id 
    , bf_id 
    , bf_company_id 
    , ib_booking_form_number 
    FROM contacts 
    , booking_form 
    , issues_booked 
WHERE ib_issue_number >= 141 
    AND ib_issue_number <= 165 
    AND bf_date_added >= '2014-11-01' 
    AND bf_date_added <= '2016-08-31' 
    AND contacts_id = bf_company_id 
    AND bf_id = ib_booking_form_number 
ORDER 
    BY ib_issue_number ASC; 
"; 

$result = mysql_query($sql) or die (mysql_error()); 

$row = mysql_fetch_array($result) or die (mysql_error()); 
while($row = mysql_fetch_array($result)) { 

echo '<ul>'; 
echo '<li>'.$row['companyname'] .'</li>'; 
echo '<li>'.$row['ib_issue_number'] .'</li>'; 
echo '<li>'.$row['bf_total_cost'] .'</li>'; 
echo '</ul>'; 
} 
+0

我我想表明每个公司在每个问题上的花费。 – webcreator25

+0

'while($ row = mysql _...){$ groupedArray [$ row ['issue number']] [] = $ row;}'。 –

+0

您希望将问题编号显示一次。对? –

回答

0

,而你从结果获取行您可以创建在while循环嵌套/分组阵列:

$result = mysql_query($sql) or die (mysql_error()); 

$groupedArray = array(); 
while($row = mysql_fetch_assoc($result)) { 
    $groupedArray[$row['ib_issue_number']][] = $row; 
} 

然后,您可以输出为一个嵌套的HTML列表:

echo "<ul>"; 
foreach ($groupedArray as $issueNumber => $group) { 
    echo "<li>issue number: $issueNumber <ul>"; 
    foreach ($group as $row) { 
     echo "<li>Company: {$row['companyname']}; Total {$row['bf_total_cost']}</li>"; 
    } 
    echo "</ul></li>"; 
} 
echo "</ul>"; 
+0

非常感谢! – webcreator25

+0

如果问题没有被预订,有没有办法显示0.00英镑?也就是说,如果问题没有被预订,它还是有价值的,可以创建一个完整的问题清单,而不仅仅是那些有预订的问题清单。 – webcreator25

+0

从数据的角度来看,“问题没有被预订”是什么意思?这个columnd会有什么价值? Hpwever听起来像一个基本的编程任务,如果条件不变。 –

0

使用聚集MySQL:

SELECT sum(bf_total_cost) ... GROUP BY ib_issue_number, bf_company_id 

这将按问题编号和公司标识对每一行进行分组。然后sum()将返回每个分组的总成本。

如果您只想根据问题编号进行分组,请从组中删除bf_company_id。

+0

嗨@Devon它听起来像你知道我在做什么,但它仍然没有工作,你能把你说的东西放进小提琴吗? – webcreator25

+0

您需要提供有关哪些功能无法使用的更多信息。如果您对PHP或MySQL不够熟悉,那么我真的无法帮助您。 – Devon

+0

我如何输出你所提到的情况,所以,我已经有了: '$ SQL =“SELECT SUM(bf_total_cost),bf_date_added,ib_issue_number,公司名称,contacts_id,bf_id,bf_company_id,ib_booking_form_number \t从联系人,booking_form,issues_booked \t GROUP BY ib_issue_number \t WHERE ib_issue_number>'141'AND ib_issue_number <='165'AND bf_date_added> ='2014-11-01'AND bf_date_added <='2016-08-31'AND contacts_id = bf_company_id AND bf_id = ib_booking_form_number \t \t ORDER BY ib_issue_number ASC“;' 现在该如何输出? – webcreator25