سؤال

انا لدي طاولتان: groups و group_members.

ال groups يحتوي الجدول على كافة المعلومات الخاصة بكل مجموعة، مثل رقم التعريف والعنوان والوصف وما إلى ذلك.

في ال group_members الجدول، فهو يسرد جميع الأعضاء المنفصلين عن كل مجموعة على النحو التالي:

group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601

في الأساس، أريد إدراج ثلاث مجموعات في الصفحة، وأريد فقط إدراج المجموعات التي تضم أكثر من أربعة أعضاء.داخل <?php while ?> حلقة، أريد بعد ذلك أربعة أعضاء منفصلين عن تلك المجموعة.لا أواجه مشكلة في سرد ​​المجموعات، وإدراج الأعضاء في حلقة داخلية أخرى، ولكن لا يمكنني تحسين المجموعات بحيث تظهر فقط تلك التي تضم أكثر من 4 أعضاء.

لا أحد يعرف كيفية القيام بذلك؟أنا متأكد من أنه مع انضمام MySQL.

هل كانت مفيدة؟

المحلول

استخدام MySQL نأخذ بيان لهذه المهام.

سيبدو استعلامك كما يلي:

SELECT g.group_id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m USING(group_id)
GROUP BY g.group_id
HAVING members > 4

مثال عندما يكون للمراجع أسماء مختلفة

SELECT g.id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m ON g.id = m.group_id
GROUP BY g.id
HAVING members > 4

تأكد أيضًا من تعيين الفهارس داخل مخطط قاعدة البيانات الخاصة بك للمفاتيح التي تستخدمها في JOINS حيث يمكن أن يؤثر ذلك على أداء موقعك.

نصائح أخرى

SELECT DISTINCT groups.id, 
       (SELECT COUNT(*) FROM group_members
        WHERE member_id = groups.id) AS memberCount
FROM groups

لك groups_main يحتوي الجدول على عمود رئيسي اسمه id.أعتقد أنه يمكنك فقط استخدام USING بناء الجملة للانضمام إذا كان groups_fans يحتوي الجدول على عمود رئيسي يحمل نفس الاسم، وهو على الأرجح ليس كذلك.لذا بدلًا من ذلك، جرب هذا:

LEFT JOIN groups_fans AS m ON m.group_id = g.id

أو استبدال group_id مع أي اسم العمود المناسب في groups_fans طاولة.

ربما أكون خارج نطاق العلامة هنا ولا أفهم البروتوكول الاختياري ولكن لماذا تنضم إلى الجداول؟

إذا كان لديك جدول به أعضاء وكان هذا الجدول يحتوي على عمود يسمى "group_id"، فيمكنك فقط تشغيل استعلام في جدول الأعضاء للحصول على عدد الأعضاء المجمعين حسب group_id.

SELECT group_id, COUNT(*) as membercount 
FROM members 
GROUP BY group_id 
HAVING membercount > 4

يجب أن يكون لهذا أقل قدر من الحمل لمجرد أنك تتجنب الانضمام ولكن لا يزال يتعين عليك منحك ما تريد.

إذا كنت تريد تفاصيل المجموعة ووصفها وما إلى ذلك، فقم بإضافة صلة من جدول الأعضاء مرة أخرى إلى جدول المجموعات لاسترداد الاسم مما سيعطيك نتيجة أسرع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top