【问题标题】:Connecting 3 tables to get data [duplicate]连接3个表以获取数据[重复]
【发布时间】:2014-07-10 11:22:17
【问题描述】:

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

用户表是这样的——

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

book1 表 -

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 表 -

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 表中获取给定日期范围内的数据-

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 完成吗?我有点迷路了。

【问题讨论】:

  • 不,您可以在 sql 级别完成所有操作,而无需涉及 PHP。你只需要了解sql joins

标签: php mysql sql


【解决方案1】:

是的,您可以使用普通的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 数据库确实是必要的。

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2019-04-03
    • 2014-02-04
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多