mysql连接两个表选择和记录问题
我想在我的网页上显示以下信息:mysql连接两个表选择和记录问题,mysql,pdo,Mysql,Pdo,我想在我的网页上显示以下信息: 日期-个人费用(业务费用) 2012年6月6日-555.00美元(3022.00美元) 2012年6月5日-666.00美元(0.00美元) 2012年6月4日-0.00美元(444.40美元) 2012年6月4日-333.00美元(2333.40美元) 目前我的代码是: $sql = "SELECT payment_date, sum(price) FROM expense WHERE category=? spender_id=? GROUP BY payme
日期-个人费用(业务费用)
2012年6月6日-555.00美元(3022.00美元)
2012年6月5日-666.00美元(0.00美元)
2012年6月4日-0.00美元(444.40美元)
2012年6月4日-333.00美元(2333.40美元)
目前我的代码是:
$sql = "SELECT payment_date, sum(price) FROM expense WHERE category=? spender_id=? GROUP BY payment_date";
$q = $conn->prepare($sql);
$result = $q->execute(array("Personal", $user_id));
while($r = $q->fetch(PDO::FETCH_ASSOC)){
$payment_date_db = $r['payment_date'];
$payment_date_db2 = date("d-F-Y", strtotime($payment_date_db));
$price_db = $r['sum(price)'];
echo $payment_date_db2 . " - " . $money_currency . $price_db . "<br />";
}
$sql=“从费用中选择付款日期、金额(价格),其中类别=?支出者id=?按付款日期分组”;
$q=$conn->prepare($sql);
$result=$q->execute(数组(“个人”,$user_id));
而($r=$q->fetch(PDO::fetch_ASSOC)){
$payment_date_db=$r['payment_date'];
$payment_date_db2=date(“d-F-Y”,strotime($payment_date_db));
$price_db=$r['sum(price)';
echo$payment\u date\u db2.“-”$money\u currency.$price\u db.“
”;
}
我不知道如何选择和显示业务费用记录,并将其显示在总括标志()中。有什么想法吗?您真的应该提供更多关于表架构的详细信息,但我认为我可以从您的查询中推断出如下内容: 费用(付款id[PK]、支出者id[FK]、类别[FK]、价格、付款日期) 其中类别字段包含“个人”或“费用” 因此,如果您想获得某个特定消费者在每个日期的个人和业务费用之和,请尝试以下查询:
SELECT
payment_date,
SUM(IF(category = 'Personal', price, 0)) AS personal_expense_total,
SUM(IF(category = 'Business', price, 0)) AS business_expense_total
FROM
expense
WHERE
spender_id = ?
GROUP BY
payment_date
因此,在PHP代码中,可以执行以下操作:
$sql = '
SELECT
payment_date,
SUM(IF(category = "Personal", price, 0)) AS personal_expense_total,
SUM(IF(category = "Business", price, 0)) AS business_expense_total
FROM expense
WHERE spender_id = :spender_id
GROUP BY payment_date';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':spender_id', $user_id, PDO::PARAM_INT); // Assuming $user_id contains an integer
$stmt->execute();
while($r = $stmt->fetch(PDO::FETCH_ASSOC))
{
$date = date('d-F-Y', strtotime($r['payment_date']));
$personal = 'usd' . number_format($r['personal_expense_total'], 2);
$business = 'usd' . number_format($r['business_expense_total'], 2);
echo "$date - $personal - ($business)<br />";
}
$sql=>
挑选
付款日期:,
总额(如果(category=“Personal”,price,0))作为个人费用总额,
金额(如果(category=“Business”,价格,0))作为业务费用总额
费用
其中spender_id=:spender_id
按付款日期分组;
$stmt=$conn->prepare($sql);
$stmt->bindParam(':spender_id',$user_id,PDO::PARAM_INT);//假设$user\u id包含一个整数
$stmt->execute();
而($r=$stmt->fetch(PDO::fetch\U ASSOC))
{
$date=date('d-F-Y',strottime($r['payment_date']);
$personal='usd'。数字格式($r['personal\u expense\u total',2);
$business='usd'。编号格式($r['business\u expense\u total',2);
echo“$date-$personal-($business)
”;
}
业务费用数据保存在哪里?哪张桌子?你能描述一下这些表吗?是的,你很聪明,知道我的查询具有理解我的数据库方案的关键。我测试了你的代码,它们工作得很好!非常感谢。我有两个问题。你能给我解释一下什么是“总和”(如果(category=“Personal”,price,0))?为什么你不写这个简单的pdo行$result=$q->execute(数组(“Personal”),$user_id))代码>?是因为它不能阻止sql注入吗?我想我对你的代码已经有些了解了。您的代码类似于'if(category==“personal”){$personal\u expense\u total=SUM(price);},但是您没有使用php变量$personal\u expense\u total,我仍然不知道作为personal\u expense\u total的是什么。对不起,我是个新手。通常我们会回显php变量,比如echo$date代码>为什么可以回显“$date”代码>?它看到u在SUM()中包装0。既然我们已经知道它是0,为什么还要求和呢?为什么要用关键字作为?我可以写personal\u expense\u total=SUM(如果(category=“personal”,price,0))代码>?你能给我发一些参考资料来学习AS
吗?