MySQL 基于表名和多个表数据的格式化结果


MySQL formatting results based on table name and multiple table data

我正在进入这个项目,并且有一点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