我正在開發一個名爲PHP-Bouncer的開源項目,我正在爲它編寫一個MySQL Query。基本上我們有三個表格:BouncerRoles,PageInRole和BouncerPageOverrides。 BouncerRoles包含訪問級別,另外兩個表通過外鍵鏈接到BouncerRoles並提供多個附加數據條目。我寫了下面的查詢,試圖拉我需要一次全部角色的數據:MySQL Group_Concat重複值
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;
該查詢的目標是提供角色ID,角色名,提供頁面的管道分隔列表,一個管道分隔的覆蓋列表(以覆蓋頁面的覆蓋頁面&的形式)。一切正常,除了查詢的最後一列,其中重複發現遍地像這樣(以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
有什麼我做錯了我的查詢導致此?
記住,'GROUP_CONCAT'可以是一個痛苦的屁股,如果你有一個大的結果 - >只會返回一個規模有限的結果(我認爲1024個字節,但我不知道),因此,如果您的結果集更大,它會被切斷。 – Nanne 2012-07-14 18:27:45
你在'GROUP_CONCAT'裏面是否缺少'DISTINCT'?看起來你的連接正在返回多行。 – 2012-07-14 18:28:48
@nanne:該限制(1024)取決於一個設置。它可以延長。 – 2012-07-14 18:34:23