您好,我在寻找解决方案时遇到了问题。
我有 3 个表:
- 客户
- 客户编号
- 客户姓名
- 关系
- 订阅号
- 客户编号
- 订阅
一个客户可以与多个订阅有关系,我想像这样显示数据:
customer_id, customer_name, subscription_first, subscription_second, subscription_n
...全部在一行中。
谁能帮帮我:?
好的,首先,感谢您的帮助:)
我做了这样的事情并且它的工作:)
SELECT `main_table`.*, `customer_lastname_table`.`value` AS `customer_lastname`, `customer_firstname_table`.`value` AS `customer_firstname`, IF(main_table.customer_id = 0, 1, 2) AS `type`, `store`.`group_id`, `store`.`website_id`, `subscription_table_one`.`subscription_code`, `subscription_table_two`.`subscription_code` FROM `newsletter_subscriber` AS `main_table`
LEFT JOIN `customer_entity_varchar` AS `customer_lastname_table` ON customer_lastname_table.entity_id=main_table.customer_id
AND customer_lastname_table.attribute_id = 7
LEFT JOIN `customer_entity_varchar` AS `customer_firstname_table` ON customer_firstname_table.entity_id=main_table.customer_id
AND customer_firstname_table.attribute_id = 5
INNER JOIN `core_store` AS `store` ON store.store_id = main_table.store_id
LEFT JOIN `b_newsletter_relations` AS `relation_table` ON relation_table.customer_id=main_table.customer_id
LEFT JOIN `b_newsletter_subscriptions` AS `subscription_table_one` ON subscription_table_one.subscription_id=relation_table.subscription_id
LEFT JOIN `b_newsletter_subscriptions` AS `subscription_table_two` ON subscription_table_one.subscription_id=relation_table.subscription_id
GROUP BY `customer_id`
Aaa,还有一件事,它是通过 PHP 动态生成的。
最佳答案
您可以使用 MySQL
提供的方便的 GROUP_CONCAT
函数。下面是解决方案。
create table customer (customer_id int, customer_name varchar(100));
create table subscriptions (subscription_id int, subscription_name varchar(100));
create table customer_relation (subscription_id int, customer_id int);
insert into customer values (1,'cust1');
insert into customer values (2,'cust2');
insert into subscriptions values (1,'sub1');
insert into subscriptions values (2,'sub2');
insert into subscriptions values (3,'sub3');
insert into customer_relation values (1,1);
insert into customer_relation values (2,1);
insert into customer_relation values (3,1);
insert into customer_relation values (1,2);
insert into customer_relation values (3,2);
SELECT c.customer_id
, c.customer_name
, GROUP_CONCAT(s.subscription_name ORDER BY s.subscription_name) subs
FROM customer c
, subscriptions s
, customer_relation x
WHERE x.subscription_id = s.subscription_id
AND x.customer_id = c.customer_id
GROUP BY
c.customer_id
, c.customer_name;
结果:
customer_id customer_name subs
1 cust1 sub1,sub2,sub3
2 cust2 sub1,sub3
关于sql - 复杂的 SQL 查询::显示乘法表中的内联数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321404/