关于PHP:连接3个表以获取数据

Connecting 3 tables to get data

本问题已经有最佳答案,请猛点这里访问。

我有三张桌子-用户桌,Book1桌,Book2桌。

用户表如下-

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

Boo1表

1
2
3
4
5
6
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

Boo2表

1
2
3
4
5
6
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

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

我编写这个查询是为了从Book1和Book2表中获取给定日期范围的数据。-

1
2
3
4
5
6
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应该小心,直到从book表中得到count、sum和max。然后应该用PHP连接到用户表。我走对了吗?一切都能用SQL完成吗?我有点迷路了。


是的,您可以在SQL中使用一个普通的JOIN

这将基本上得到所有用户,并将他们加入到各自的金额在这个期间。然后,结果按用户分组,这样我们就可以合计金额了。

1
2
3
4
5
6
7
8
9
10
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

一个用来测试的sqlfiddle。

作为补充说明,了解连接对于有效地使用SQL数据库是非常必要的。