基本上,我想在一个表中使用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);
?>
当我运行这两个问题:
该公司重申,我猜是因为我运行两个查询。我想要的是每个公司的一个输出记录。
我没有得到每个企业总体市场,而我得到的总买入和第一条记录的总销售的
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:
我可以建议你应用分而治之的方法。你在MySQL部分工作,并尝试创建一个可以编写PHP的SQL。此外,如果您创建一个像这样的小提琴[链接](http://sqlfiddle.com/#!9/077e1/32)将更容易让我们了解问题并帮助您解决问题。否则读取这么多的代码将需要很长时间,并阻止其他人帮助 –
1我看到的问题是,你串联你的'$行['value_bought']' - >'$ buy_value。= $ row ['value_bought']'。
';'&&'$ row ['value_sold']' - >'$ sell_value。= $ row ['value_sold']。''
';'把它们变成字符串。所以当你试图做''total_value = $ buy_value + $ sell_value;'你试图添加字符串,而不是整数。 – Sean
谢谢你们。我已经能够解决这个问题。这是我做的。我用下面的代码在我的数据库中创建了两个视图。 _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