2012-06-10 50 views
0

我想说明以下信息到我的网页上:
日期 - 个人费用(营业费)
06日至2012 - usd555.00(usd3022.00)
05日至2012 - usd666.00(USD0.00)
04日至2012 - USD0.00(usd444.40)
04日至2012 - usd333.00(usd2333.40)
MySQL的加入两个表选择和记录问题

目前我的代码是:

$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 />"; 
    } 

我不知道如何选择并显示业务费用记录并将其显示在毯子标志()中。任何想法?

+0

我们在哪里存储营业费用数据?哪张桌子?你能描述一下桌子吗? – JHS

回答

1

你真的应该提供更多的细节,关于你的表模式,但我想我可以从查询推断,这件事情是这样的:

费用(payment_id [PK],spender_id [FK],类别[ FK ??],price,payment_date)

其中category字段包含“Personal”或“Expense”。

所以,如果你想获得个人和营业费为每个日期的特定花钱的总和,尝试此查询:

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 />"; 
} 
+0

是的,你很聪明,知道我的查询有理解我的数据库方案的关键。我测试了你的代码,他们完美地工作!谢谢。我有两个问题。你可以向我解释什么是SUM(IF(category =“Personal”,price,0))?为什么你不写这个简单的pdo行'$ result = $ q-> execute(array(“Personal”,$ user_id));'?是因为它无法防止SQL注入? – zac1987

+0

我想我已经了解了一下你的代码已经做了些什么。你的代码类似于'if(category ==“personal”){$ personal_expense_total = SUM(price); }'但你没有使用PHP变量$ personal_expense_total,我仍然不知道'AS personal_expense_total'是什么。对不起,我是这里的新手。 – zac1987

+0

通常情况下,我们会回显php变量,如'echo $ date;'为什么你可以'echo $ date“;'? – zac1987