当前位置: 首页 > 面试题库 >

MySQL Group_Concat重复值

焦驰
2023-03-14
问题内容

我正在开发一个名为PHP-Bouncer的开源项目,而我正在为此编写的MySQL查询遇到问题。基本上,我们有三个表:BouncerRoles,PageInRole和BouncerPageOverrides。BouncerRoles包含访问级别,另外两个表通过外键链接回BouncerRoles,并提供多个附加数据条目。我编写了以下查询,以尝试一次提取我需要的所有角色数据:

select BouncerRoles.RoleID, BouncerRoles.RoleName, 
GROUP_CONCAT(PageInRole.PageName separator '|') as ProvidedPages, 
GROUP_CONCAT(CONCAT(BouncerPageOverrides.OverriddenPage,'&',BouncerPageOverrides.OverridingPage) separator '|') as OverriddenPages 
from BouncerRoles join PageInRole on BouncerRoles.RoleID = PageInRole.RoleID 
join BouncerPageOverrides on BouncerRoles.RoleID = BouncerPageOverrides.RoleID
group by BouncerRoles.RoleID;

该查询的目标是提供RoleID,RoleName,提供页面的以竖线分隔的列表和替代的竖线分隔的列表(以overriddenpage&overridingpage的形式)。除查询的最后一列外,其他所有内容都可以正常工作,查询的最后一遍如此重复(以CSV格式输出):

RoleID,RoleName,ProvidedPages,OverriddenPages
2,Exchange,exchange-how.php|exchange-support.php|exchange.php|premium-promo.php|exchange-resorts.php|premiumplus-promo.php|exchange-deposit.php|exchange-requestdestination.php,whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php
3,Premium,premiumplus-promo.php|premium-cruises.php|premium-resorts.php|premium-condohome.php|premium-hotelaircar.php|premium.php|premium-restaurants.php|premium-overview.php,premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php
4,"Premium Plus",premiumplus-exclusiveescapes.php|premiumplus.php|premiumplus-overview.php|premiumplus-concierge.php|premiumplus-airportlounge.php,premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php

我在查询中做错了什么导致这种情况吗?


问题答案:

您可能正在将一个表与具有1..n关系的两个表连接在一起,从而产生重复的结果。

  • 使用GROUP_CONCAT( DISTINCT ...)

  • 使用两个子查询:在每个子查询中GROUP_CONCAT(),在2个表中的每个表上使用group by。然后连接两个子查询和主表。



 类似资料:
  • 简介 本章中我会介绍重复。通过重复,你可以编写“通常的”程序。虽然也可以使用do表达式,但Scheme中通常通过递归实现重复。 递归 在自己的定义中调用自己的函数叫做递归函数(Recursive Function)。虽然这听起来很奇怪,但是循环的常见方法。如果你把函数类比为机器的话,递归似乎毫无道理。然而,正因为函数是过程,函数调用自己是有意义的。比如说,让我们来考察一下文献调研吧。你可能需要去阅

  • 我有一个表单,我想知道在普通JS中选中了哪个复选框,并返回它的值。我用单选按钮而不是复选框来获得它,只是无法确定如何调用它。如果我用单键调用它,它会返回下面的空字符串代码。 单选按钮示例: 现在我尝试使用复选框:

  • 我正在使用getAllCellInfo从我的手机(无根LG G5)获取服务和相邻的手机信息,但该函数返回所有相邻测量塔的重复数据。在我所在的地区,我的测试数据大部分时间是3G(WCDMA)。这里是我的WCDMA结果的提取,显示了原始字符串和解析值(在代码中引用以便于阅读): 注意,服务小区和相邻小区被标识(isRegistered),并显示各自的信号强度(dBm)和给定服务小区的小区标识数据,但相

  • 我有一个简单的项目,该项目将个人信息提供给数据库(sqlite),现在我想避免插入重复值(按名称),我不能做什么?谢谢你们

  • 下面是Gradle Build的stacktrace: Build.Gradle看起来是这样的: 编辑1:从META-INF目录中的httpmime库的本地副本中删除我有问题的文件,成功解决了此问题

  • 问题内容: 这个问题已经在这里有了答案 : “ INSERT IGNORE”与“ INSERT…ON DUPLICATE KEY UPDATE” (11个答案) 6年前关闭。 我正在尝试完成此查询;我的标签字段设置为UNIQUE,我只是希望数据库忽略任何重复的标签。 甚至可以接受 问题答案: 建议不要使用INSERT IGNORE,因为它会忽略所有错误(即,草率的全局忽略)。相反,由于在您的示例中

  • 问题内容: 我在存储的过程中有一个字符串,类似于或 从上面的字符串中,我必须从中删除多个逗号,它必须看起来像 或仅在 then时 。我必须仅使用Sql Server函数。我正在使用Sql Server 2008和.Net 3.5 提前致谢。 问题答案: 该选项适用于仅使用逗号或最多398个连续逗号的字符串。 如果需要更多,在顶部添加额外的2的幂,或者如果需要较少,则从顶部删除2的幂。每个阶段的注释

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: mysql中id(auto_increment列)的碎片 我的数据库中有此列。假设其名称为“ threadid”。它包含赋予每个线程以区别的唯一ID。 线程号9 8 7 6 5 4 3 2 1 假设我已删除ID为5和6的线程。 线程号9 8 7 4 3 2 1 但是,当删除后有一个提交时,给该线程的唯一ID是10。不是5。我认为