2012-06-10 51 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