简体   繁体   English

两个mysql查询和2个$ results。 我可以仅使用一个mysql查询获得相同的2 $ results吗?

[英]Two mysql queries and 2 $results. Can I get the same 2 $results using only one mysql query?

Have html input (user enters in html form) like this 具有这样的html输入(用户以html形式输入)

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

Have mysql table like this 有这样的mysql表

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

Want to get value of column TrackPayments for each debit and credit 想要获取每个debitcredit TrackPayments列的值

At first create arrays $debit and $credit like that: 首先,像这样创建数组$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];
 }

Then execute 2 queries 然后执行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);

And get 并得到

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

and

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

Code is rather long and I do 2 mysql queries. 代码相当长,我可以执行2个mysql查询。 Is it possible to get same result using one mysql query (to use less resources of system)? 是否可以使用一个mysql查询获得相同的结果(以使用较少的系统资源)?

You can do something like this 你可以做这样的事情

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

Sample output: 样本输出:

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

or 要么

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);

Sample output: 样本输出:

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

Here is SQLFiddle demo 这是SQLFiddle演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM