سؤال

اجعل مستخدمي الجدول وهناك حقل مدعو _BY_ID يعرض معرف المستخدم للشخص الذي دعا هذا المستخدم. تحتاج إلى جعل صفوف استعلام MySQL مع جميع الحقول من المستخدمين بالإضافة إلى حقل invites_count يوضح عدد الأشخاص الذين تمت دعوتهم من قبل كل مستخدم. شيء من هذا القبيل:

SELECT
    User.*, Count.count
FROM
    users AS User,
    (
        SELECT COUNT(*) AS count FROM users WHERE users.invited_by_id=User.id
    ) AS Count;

هذا لا يعمل ، لذا أحتاج إلى عمل عمل.

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

المحلول

SELECT  u.*,
        (
        SELECT  COUNT(*)
        FROM    users ui
        WHERE   ui.invited_by_id = u.id
        ) AS cnt
FROM    users u    

نصائح أخرى

حسنًا ، أولاً وقبل كل شيء ، count هي كلمة محفوظة في SQL ، لذا لا يمكنك استخدامها كمستعار للجدول (إلا إذا اقتبدت منها بطريقة ما ولكن لا تفعل ذلك). ثانياً ، الطريقة الحقيقية لحل هذه المشكلة هي تقديم أ GROUP BY بند في انبعاثك الفرعي.

جرب هذا:

SELECT user3.*, subquery.theCount FROM
    users AS user3
INNER JOIN ( 
    SELECT
        user1.id, count(user2.id) AS theCount
    FROM
        users AS user1
    LEFT OUTER JOIN
        users AS user2 ON user2.invited_by_id=user1.id
    GROUP BY user1.id
) AS subquery ON subquery.id=user3.id;

إليكم سرًا صغيرًا قذرًا عن MySQL: إنه يتيح لك الغش مع GROUP BY بيان وحدد الأعمدة غير الموجودة في GROUP BY قائمة وأيضًا ليس في وظائف إجمالية. RMDMSEs الأخرى لا تسمح لك بذلك.

SELECT
    user1.*, count(user2.id) AS theCount
FROM
    users AS user1
LEFT OUTER JOIN
    users AS user2 ON user2.invited_by_id=user1.id
GROUP BY user1.id;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top