我想输出一个客户列表,其中包含他已注册的事件的名称和数量。
像这样:
max (3)Sports,Food,Cinema
tom (2) Food, Sports
我无法让它发挥作用。我总是得到这个结果:
max Sports
max Food
max Cinema
tom Food
tom Sports
我有大约这个表设置:
+-----+-----------+-------+-----+
+ CID + Customer + misc..+ ... +
+-----+-----------+-------+-----+
+ 1 + max + abc + ... +
+-----+-----------+-------+-----+
+ 2 + tom + xyz + ... +
+-----+-----------+-------+-----+
+-----+------------+--------+---------+-----+
+ EID + RID + Event + misc... + ... +
+-----+------------+--------+---------+-----+
+ 1 + + Sports + misc... + ... +
+-----+------------+--------+---------+-----+
+ 2 + + food + misc... + ... +
+-----+------------+--------+---------+-----+
+ 3 + + cinema + misc... + ... +
+-----+------------+--------+---------+-----+
+ 4 + + Event + misc... + ... +
+-----+------------+--------+---------+-----+
+-----+-----+-----+
+ RID + EID + CID +
+-----+-----+-----+
+ 1 + 1 + 1 +
+-----+-----+-----+
+ 2 + 2 + 1 +
+-----+-----+-----+
+ 3 + 3 + 1 +
+-----+-----+-----+
+ 4 + 1 + 2 +
+-----+-----+-----+
+ 5 + 2 + 2 +
+-----+-----+-----+
我用GROUP_CONCAT()尝试了它,但这似乎不是它的方式......
我已加入所有表格,但我认为我需要2个查询来解决此任务。
我在我的while循环中尝试了一个选择,但这是废话,它极其缓慢......
我试过这个:
$sql1 = "SELECT et.Art, et.Kategorie, et.ID, et.Event AS Event1,
GROUP_CONCAT( loc.ORT ) AS ORT1
FROM ".DB_CUSTOMERS_TABLE." AS et
JOIN ".DB_RELATIONS_TABLE." AS rel
ON (et.id = rel.EID)
JOIN ".DB_EVENT_TABLE." AS loc
ON (loc.Location_ID = rel.Location_ID)
GROUP BY rel.EID
";
我需要一个理想,我怎么能以一种很好的方式解决这个问题。
这是读书的好处。我希望我不要混淆。答案 0 :(得分:2)
您希望实现的是每位客户的汇总结果。
您目前正在做的是按关系进行聚合,而关系本身就是聚合的主题。
为此,您必须按要应用聚合的列进行分组,即:客户名称。
然后,您可以使用简单的COUNT()和GROUP_CONCAT来实现您想要的聚合。
答案 1 :(得分:0)
您需要对您要选择的每个字段进行分组,而不是您要列出的字段,因为您的查询与您的问题中提供的信息不符,所以很难判断,但从您的示例中简化为:
SELECT Name, GROUP_CONCAT(Event)
FROM table
GROUP BY Name
所以它可能很简单:
$sql1 = "SELECT et.Art, et.Kategorie, et.ID, et.Event AS Event1,
GROUP_CONCAT( loc.ORT ) AS ORT1
FROM ".DB_CUSTOMERS_TABLE." AS et
JOIN ".DB_RELATIONS_TABLE." AS rel
ON (et.id = rel.EID)
JOIN ".DB_EVENT_TABLE." AS loc
ON (loc.Location_ID = rel.Location_ID)
GROUP BY et.Art, et.Kategorie, et.ID, et.Event
";
但不能肯定的是,在你提出问题的信息之后,你实际上就是这样。
如果您的查询返回:
Name Event
max Sports
max Food
max Cinema
tom Food
tom Sports
您可以将其包装在上面的简单组concat示例中:
SELECT Name, GROUP_CONCAT(Event)
FROM (Your query) as sub
GROUP BY Name