连接3个表以获取数据

时间:2014-05-21 17:02:00

标签: php mysql sql

我有3个表 - 用户表,book1表,book2表。

用户表就像这样 -

user_id | gender | l_name | f_name
-------- -------- -------- -------
 1        male     Doe      Jon
 2        female   Xu       Jini
 3        female   Din      Jane

book1 table -

b_id | user_id | amount | date
----- --------- -------- ----------
 1      3        98.30    2014-05-14
 2      1        65.70    2014-05-07
 3      2        14.40    2014-05-06
 4      2        55.60    2014-05-07

book2 table -

b_id | user_id | amount | date
----- --------- -------- ----------
 1      2        38.20    2014-04-06
 2      3        84.40    2014-04-02
 3      3        31.30    2014-04-12
 4      1        74.40    2014-05-06

用户提供日期范围作为输入,我想计算该日期范围的销售计数(COUNT),总金额(SUM)和最大日期(MAX)。在此之后,我想将此数据连接到用户表,并使用user_id获取性别和名称。

我编写了这个查询来获取book1和book2 tables-

中给定日期范围的数据
SELECT * FROM book1
WHERE date between '2014-04-02' and '2014-05-15'
UNION ALL
SELECT * FROM book2
WHERE date between '2014-04-02' and '2014-05-15'
ORDER BY customer_id;

通过这个我得到book1和book2表中满足日期范围的所有行。现在我应该使用子查询或其他东西来达到目标​​。我认为sql应该小心,直到从书桌上获得计数,总和和最大值。然后,应该在PHP中完成与用户表的连接。我在正确的道路上吗?一切都可以在SQL中完成吗?我有点失落。

1 个答案:

答案 0 :(得分:3)

是的,您可以使用普通JOIN在SQL中执行此操作。

这基本上会让所有用户在这段时间内加入他们各自的金额。之后,结果按用户分组,以便我们可以总结金额。

SELECT u.user_id, u.l_name, u.f_name, SUM(x.amount) `total amount`
FROM user u
JOIN (
  SELECT user_id, date, amount FROM book1
  UNION ALL
  SELECT user_id, date, amount FROM book2
) x
  ON u.user_id = x.user_id
 AND x.date between '2014-04-02' and '2014-05-15'
GROUP BY u.l_name, u.f_name,u.user_id

An SQLfiddle to test with

作为旁注,了解联接实际上是有效使用SQL数据库的必要条件。