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
吗?