質問
テーブルのユーザーを持って、フィールドには、このユーザーを招待した人のユーザー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;
所属していません StackOverflow