2015-07-10 153 views
1

基本上,我想在一个表中使用while循环显示下面的sql查询的组合输出。我有一个名为的表,参与机构其中包含所有机构的唯一代码和名称。我也有交易表,其中每个机构可以是买方,卖方或两者(是的,机构可以为其两个客户进行交易)。在这里好人的帮助下,我能够使用查询中指出的sql JOIN将参与机构表中的每个代码与相应的名称进行匹配。下面的第一个查询将总结每个公司的所有购买价值,第二个查询将为他们的销售做同样的事情。但是,我想要显示的表格将在while循环中为每个公司提供[Sum(buy_value)+ Sum(sell_value)]。我如何使用mysql或php来实现这一点。 注意:交易表有两列,分别是buy_firm_code和sell_firm_code。他们持有的记录是相同的,取决于公司参与的交易的哪一方。 以下是我迄今为止所做的。在while循环中合并两个SQL查询

<?php 
$con=mysqli_connect("localhost","db_user","password","database"); 

$total_value = 0; 
$buy_value = 0; 
$sell_value = 0; 
$firm_name = ""; 
$institution_code = ""; 
$display = ""; 

// Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$buy_sql="SELECT p.institution_code, p.institution, SUM(t.trade_value) 
value_bought FROM trades t JOIN participating_institutions p ON  p.institution_code = t.buy_firm_code GROUP BY t.buy_firm_code ORDER BY value_bought DESC"; 

if ($buy_result = mysqli_query($con, $buy_sql)) 
{ 
// Fetch one and one row for buy side 
while($row=mysqli_fetch_array($buy_result)) { 
    $buy_value .= $row['value_bought'].'<br>'; 
    $institution_code .= $row['institution_code'].'<br>'; 
    $firm_name .= $row['institution'].'<br>'; 

} 

} 

$sell_sql = "SELECT p.institution_code, p.institution, SUM(t.trade_value) value_sold FROM trades t JOIN participating_institutions p ON p.institution_code = t.sell_firm_code GROUP BY t.sell_firm_code ORDER BY value_sold DESC"; 

if ($sell_result = mysqli_query($con, $sell_sql)) 
{ 
// Fetch one and one row for sale side 
while($row=mysqli_fetch_array($sell_result)) { 
    $sell_value.= $row['value_sold'].'<br>'; 
    $institution_code .= $row['institution_code'].'<br>'; 
    $firm_name.= $row['institution'].'<br>'; 

} 

} 
$total_value = $buy_value + $sell_value; 
$display .= '<table><tr><td>'.$institution_code.'</td><td>'.$firm_name .'</td><td>'.$total_value.'</td></tr></table>'; 
echo $display; 

// Free result set 
mysqli_free_result($buy_result); 
mysqli_free_result($sell_result); 
mysqli_close($con); 
?> 

当我运行这两个问题:

  1. 该公司重申,我猜是因为我运行两个查询。我想要的是每个公司的一个输出记录。

  2. 我没有得到每个企业总体市场,而我得到的总买入和第一条记录的总销售的

    Firmcode A: FirmName A: 20,000 
    Firmcode B: FirmName B: 40,000 
    Firmcode C: FirmName C: 50,000 
    

,而不是总和我得到这个

Firmcode A: FirmName A: 
Firmcode B: FirmName B: 20,000 
Firmcode C: FirmName C: 
+0

我可以建议你应用分而治之的方法。你在MySQL部分工作,并尝试创建一个可以编写PHP的SQL。此外,如果您创建一个像这样的小提琴[链接](http://sqlfiddle.com/#!9/077e1/32)将更容易让我们了解问题并帮助您解决问题。否则读取这么多的代码将需要很长时间,并阻止其他人帮助 –

+0

1我看到的问题是,你串联你的'$行['value_bought']' - >'$ buy_value。= $ row ['value_bought']'。
';'&&'$ row ['value_sold']' - >'$ sell_value。= $ row ['value_sold']。''
';'把它们变成字符串。所以当你试图做''total_value = $ buy_value + $ sell_value;'你试图添加字符串,而不是整数。 – Sean

+0

谢谢你们。我已经能够解决这个问题。这是我做的。我用下面的代码在我的数据库中创建了两个视图。 _SELECT p.institution_code,p.institution,SUM(t.trade_value) value_bought从交易t JOIN participation_institutions p ON p.institution_code = t.buy_firm_code GROUP BY t.buy_firm_code ORDER BY value_bought DESC_ – Gyne

回答

0

谢谢你们。我已经能够解决这个问题。我使用上面的两个查询在我的数据库中创建了两个视图。然后,我在我的代码中使用第三个查询来使用SUM集合函数来加入这两个视图,以获得我的总购买和总销售价值。它现在完美。感谢您的贡献。