php - 连接3张表获取数据

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

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

最佳答案

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

关于php - 连接3张表获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789594/

相关文章:

php - mysql/php上两个表的加减法

mysql - 使用 Sailsjs 进行连接池

sql - 从执行命令插入临时表

php - 将 session 安全地传递到另一个浏览器的最佳方法

mysql - 如何在 MySQL 中进行随机排序。我应该使用 random() 还是 uuid()

php - Windows Phone中上传图片和php POST方法

MySQL 分组查询

php文件路径/文件扩展名未保存到sql中的数据库

javascript - 如何使用 javascript 链接 href

php - 用于 Web 开发的 MVC 架构的替代方案是什么?