从两个表中选择结果并合并结果

时间:2013-01-24 08:49:58

标签: php mysql

给出以下示例表。

 CREDITS

 +-------+--------------+--------------+---------------------------+
 |   ID  |   userid     |     value    |  date_activated           |
 +-------+--------------+--------------+---------------------------+
 |   1   |   1722       |     50       |  2012-11-08 22:24:41      |
 +-------+--------------+--------------+---------------------------+
 |   2   |   3242       |     10       |  2012-11-07 22:24:41      |
 +-------+--------------+--------------+---------------------------+
 |   3   |   23232      |     20       |  2012-11-06 22:24:41      |
 +-------+--------------+--------------+---------------------------+
 |   4   |   1722       |     30       |  2012-11-19 22:24:33      |
 +-------+--------------+--------------+---------------------------+

 EXPENSE

 +-------+--------------+--------------+---------------------------+
 |   ID  |   userid     |     value    |  date_spent               |
 +-------+--------------+--------------+---------------------------+
 |   1   |   1722       |     10.20    |  2012-11-18 22:24:41      |
 +-------+--------------+--------------+---------------------------+
 |   2   |   3242       |     2.00     |  2012-11-03 22:24:41      |
 +-------+--------------+--------------+---------------------------+
 |   3   |   23232      |     20.00    |  2012-11-01 22:24:41      |
 +-------+--------------+--------------+---------------------------+
 |   4   |   1722       |     18.00    |  2012-11-20 22:24:33      |
 +-------+--------------+--------------+---------------------------+

我想达到以下结果。

 |   1722       |     50       |  2012-11-08 22:24:41      |
 |   1722       |     10.20    |  2012-11-18 22:24:41      |
 |   1722       |     30       |  2012-11-19 22:24:33      |
 |   1722       |     30       |  2012-11-19 22:24:33      |
 |   1722       |     18.00    |  2012-11-20 22:24:33      |
 |   3242       |     10       |  2012-11-07 22:24:41      |    
 |   3242       |     2.00     |  2012-11-03 22:24:41      |
 |   23232      |     20.00    |  2012-11-01 22:24:41      |
 |   23232      |     20.00    |  2012-11-01 22:24:41      |

我通常会这样做,就像做以下

  $query = "SELECT * FROM CREDITS ORDER BY user id";
  $result = mysql_query($query);
  while ($row = mysql_fetch_array( $result ))
  {
       $combind_result = $combind_result.$row['userid']."|".$row['value']."|".$row['date_activated']."|"; 
       $user_id = $row['user_id'];
       $query2 = "SELECT * FROM EXPENSE userid = '$user_id' ORDER BY date_spent";
       $result2 = mysql_query($query2);
       while ($row2 = mysql_fetch_array( $result2 ))
           {
           $combind_result.$row2['userid']."|".$row2['value']."|".$row2['spent']."|"; 
           }
   }        

   echo $combind_result;

可能有一些错别字,但我认为它显示了这个概念。有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

看看UNION MYSQL CLAUSE 。 就是这样。

(SELECT a FROM t1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 ORDER BY a LIMIT 10);

答案 1 :(得分:0)

尝试使用UNION ALL

SELECT user_id, value, date_activated FROM CREDITS
UNION ALL
SELECT user_id, value, date_activated FROM EXPENSE

您可能希望第二个选择阅读:

SELECT user_id, value * -1, date_activated FROM EXPENSE,这样您就可以在信用与费用之间获得数学权利。您还可以添加代码以进一步帮助区分信用和费用。

SELECT user_id, value, date_activated, 'c' as `type` FROM CREDITS
UNION ALL
SELECT user_id, value * - 1, date_activated,'e' as `type` FROM EXPENSE

答案 2 :(得分:0)

试试这个:

    SELECT user_id, value,date
    FROM
      ( SELECT id,
               user_id,
               value,
               date_activated AS date
       FROM credits
       UNION ALL SELECT id,
                    user_id,
                    value,
                    date_spend AS date
       FROM expense ) x
    ORDER BY id, date;