2013-12-22 20 views
0

具備HTML輸入(用戶在HTML表單中輸入)這樣

row_id | debit | credit | 
--------------------------- 
1  |2610 | 2380 
2  |2620 | 2310 
3  |5310 | 2621 

有MySQL的表像這樣

TrackPayments | AccountNumber 
--------------------------- 
1    |2610  
1    |2310 
0    |2380 
1    |2620  
1    |2621  
1    |5310 

想得到TrackPayments列的值對每個debitcredit

在首先創建如下的數組$debit$credit

foreach ($_POST['row_id'] as $i => $row_id) { 
$debit[] = $_POST['debit'][$i]; 
} 

foreach ($_POST['row_id'] as $i => $row_id) { 
$credit[] = $_POST['credit'][$i]; 
} 

然後執行2個查詢

$stmt1 = $db->prepare('SELECT TrackPayments FROM users WHERE AccountNumber= ?'); 
$stmt1->execute($debit); 
$result1 = $stmt1->fetch(PDO::FETCH_ASSOC); 

$stmt2 = $db->prepare('SELECT TrackPayments FROM users WHERE AccountNumber= ?'); 
$stm2->execute($credit); 
$result2 = $stmt1->fetch(PDO::FETCH_ASSOC); 

並獲得

$result1 = array("1", "1", "1");

$result2 = array("0", "1", "1");

代碼爲拉澤很長時間,我做了2個MySQL查詢。是否有可能使用一個mysql查詢得到相同的結果(使用較少的系統資源)?

回答

1

你可以做這樣的事情

SELECT debit, u.TrackPayments track_debit, 
     credit, u2.TrackPayments track_credit 
    FROM 
(
    SELECT 2610 debit, 2380 credit UNION ALL 
    SELECT 2620, 2310 UNION ALL 
    SELECT 5310, 2621 
) q JOIN users u 
    ON q.debit = u.AccountNumber JOIN users u2 
    ON q.credit = u2.AccountNumber 

輸出示例:

 
| DEBIT | TRACK_DEBIT | CREDIT | TRACK_CREDIT | 
|-------|-------------|--------|--------------| 
| 2620 |   1 | 2310 |   1 | 
| 2610 |   1 | 2380 |   0 | 
| 5310 |   1 | 2621 |   1 | 

SELECT AccountNumber, TrackPayments, 'debit' type 
    FROM users 
WHERE AccountNumber IN(2610, 2620, 5310) 
UNION ALL 
SELECT AccountNumber, TrackPayments, 'credit' type 
    FROM users 
WHERE AccountNumber IN(2380, 2310, 2621); 

輸出示例:

 
| ACCOUNTNUMBER | TRACKPAYMENTS | TYPE | 
|---------------|---------------|--------| 
|   2610 |    1 | debit | 
|   2620 |    1 | debit | 
|   5310 |    1 | debit | 
|   2310 |    1 | credit | 
|   2380 |    0 | credit | 
|   2621 |    1 | credit | 

這是SQLFiddle演示

相關問題