Domanda

Avere un utente da tavolo e non v'è un campo che mostra invited_by_id ID utente della persona che ha invitato questo utente. Hai bisogno di fare una query MySQL ritorno file con tutti i campi degli utenti, più un campo invites_count che mostra quante persone sono state invitate da ciascun utente. Qualcosa di simile a questo:

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

Questo non sta funzionando quindi ho bisogno di uno che lavora.

È stato utile?

Soluzione

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

Altri suggerimenti

Ok, prima di tutto, count è una parola riservata in SQL quindi non è possibile utilizzarlo come un alias di tabella (a meno che non si cita in qualche modo, ma non farlo). In secondo luogo, il vero modo per risolvere questo problema è quello di introdurre una clausola GROUP BY nel subquery.

Prova questo:

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;

Ecco un piccolo segreto su MySQL: Esso consente di barare con la dichiarazione GROUP BY e selezionare le colonne che non non sono nella lista GROUP BY e anche nelle funzioni di aggregazione. Altri RMDMSes non consentono di fare questo.

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top