質問

テーブルのユーザーを持って、フィールドには、このユーザーを招待した人のユーザーIDを示すinvited_by_idがあります。ユーザーと各ユーザーが招待されたどのように多くの人々を示すinvites_countフィールドからすべてのフィールドを持つ行を返すMySQLのクエリを作成する必要があります。 このような何かます:

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

私が働い1を必要とするように、この1が作動していません。

役に立ちましたか?

解決

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

他のヒント

あなたは(あなたには、いくつかの方法でそれを引用しない限り、それをしない)表の別名として使用することはできませんので、 [OK]を、最初にすべての、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