मैं PHP-Bouncer नामक ओपन सोर्स प्रोजेक्ट पर काम कर रहा हूं, और मुझे इसके लिए लिख रहे एक MySQL क्वेरी के साथ समस्याएं हैं। असल में हमारे पास तीन टेबल हैं: बाउंसररोल, पेजइनोल, और बाउंसरपेज ओवरराइड। बाउंसररोल में पहुंच स्तर होते हैं, और अन्य दो टेबल विदेशी कुंजी के माध्यम से बाउंसररोल से लिंक करते हैं और अतिरिक्त डेटा की कई प्रविष्टियां प्रदान करते हैं। मैं निम्न क्वेरी लिखा है भूमिका डेटा मैं एक बार में सभी की जरूरत के सभी खींचने के लिए प्रयास करने के लिए: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;
इस क्वेरी का लक्ष्य भूमिका-आईडी, RoleName, बशर्ते पृष्ठों की एक पाइप सीमांकित सूची, प्रदान करना है और एक पाइप ओवरराइड की सीमित सूची (overriddenpage & overridingpage के रूप में)।
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 बाइट लगता है, लेकिन यकीन नहीं है), इसलिए यदि आपके resultset वापस आ जाएगी बड़ा होगा यह कट ऑफ हो जाएगा। – Nanne
क्या आप अपने 'GROUP_CONCAT' के अंदर' DISTINCT' खो रहे हैं? ऐसा लगता है कि आपकी भागीदारी कई पंक्तियों को वापस कर रही है। –
@nanne: वह सीमा (1024) एक सेटिंग पर निर्भर करती है। इसे बढ़ाया जा सकता है। –