我正在进入这个项目,并且有一点MySQL背景来做基本的SELECTs和INSERTs等等。但是,这让我把头撞在墙上。
我在 MySQL 中有一个典型的用户信息表:
USERS
+-------+----------+---------+-----+
|user_id|first_name|last_name|email|
+-------+----------+---------+-----+
1 tim jones tj@acme.com
2 sarah peteres sp@acme.com
3 larry doe ld@acme.com
然后我有多个产品表:
PRODUCTS_ONE
+-------+-------+---------+----------+--------------+
|prod_id|user_id|prod_name|prod_width|prod_ship_date|
+-------+-------+---------+----------+--------------+
1 1 bowl nine 1-1-16
2 1 fork one 1-2-16
3 2 plate eleven 1-3-16
PRODUCTS_TWO
+-------+-------+----------+--------+--------------+
|prod_id|user_id|prod_state|prod_job|prod_ship_date|
+-------+-------+----------+--------+--------------+
1 3 maine min 1-1-16
2 2 texas max 1-2-16
3 1 ohio min 1-1-16
我总共有 15 个 PRODUCT 表,它们都有 prod_id、users_id 和 prod_ship_date。其他字段可能都根据它们所在的产品表而有所不同。但是,所有不同的产品表都有这三个公共字段。
我试图完成的是获取与特定发货日期匹配的产品的用户信息和产品信息列表。
我想找到所有用户以及他们在某个日期获得的产品表和产品 ID。
因此,如果我搜索发货日期为 1-1-16,我会得到类似以下内容:
+----------------+-----------+-------------+-----------+
|users.first_name|users.email|product_table|products_id|
+----------------+-----------+-------------+-----------+
tim tj@acme.com one,two 1,3
larry ld@acme.com one 3
如果我搜索 1-2-16 的发货日期,我会得到这样的结果:
+----------------+-----------+-------------+-----------+
|users.first_name|users.email|product_table|products_id|
+----------------+-----------+-------------+-----------+
tim tj@acme.com one 2
sarah sp@acme.com two 2
我希望这一切都是有道理的。不幸的是,由于遗留问题,我无法更改各种产品表的结构或布局。
我只是想不出用于获取类似内容的 MySQL 语句。
以上结果将用于报告目的。
你可以写一个这样的查询:
select first_name,email,prod_id,group_concat(product_table) as product_table from (
select u.user_id ,first_name,email,prod_id, 'one' as product_table from users u join products_one p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
union
select u.user_id,first_name,email,prod_id, 'two' as product_table from users u join products_two p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
) a
按a.user_id分组
按user_id,product_table订购
等等。
与第二组连接并排序
select first_name,email,group_concat(prod_id),group_concat(product_table) as product_table from (
select u.user_id ,first_name,email,prod_id, 'one' as product_table from users u join products_one p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
union
select u.user_id,first_name,email,prod_id, 'two' as product_table from users u join products_two p on u.user_id = p.user_id where prod_ship_date = '2016-01-01 00:00:00'
) a
group by a.user_id
order by user_id,product_table
看看这个 sqlfiddle