J'ai donc un tableau des followers qui (évidemment) contient quels utilisateurs suivent qui.
Ce que je voudrais faire, c'est découvrir tout Utilisateur 1 ' s abonnés ( U1F ), découvrez qui ils suivent tous ( U1Ffol ), puis en utilisant U1Ffol , additionnez qui U1F suit le plus collectivement. Cela n'a peut-être pas de sens, mais j'ai une idée assez approximative de la façon de le montrer en SQL (gardez à l'esprit que je suis un peu un noob, alors excusez-moi car il s'agit clairement d'un code invalide et n'est pas ce que je veux utiliser ).
+------+---------+ | User | f_count | +------+---------+ | 1 | 4 | | 4 | 1 | | 5 | 1 | +------+---------+
Voici la structure du tableau:
+----+----------+-----------+ | id | follower | following | +----+----------+-----------+ | 1 | 2 | 1 | | 2 | 5 | 1 | | 3 | 9 | 1 | | 4 | 1 | 4 | | 5 | 1 | 5 | | 6 | 4 | 1 | +----+----------+-----------+
Donc, dans ce cas, le résultat attendu serait (curieusement, la personne qu'ils suivent le plus, collectivement, est Utilisateur 1 ):
/* retrieve user 1's followers */ SELECT follower AS U1F FROM followers WHERE following = 1; /* retrieve who each of those users is following */ SELECT following AS U1Ffol FROM followers WHERE follower IN U1F; /* find out who they're all following *collectively* */ SELECT following AS User, COUNT(*) as f_count FROM U1Ffol GROUP BY User ORDER BY f_count DESC
3 Réponses :
Est en dessous de ce que vous voulez -
SELECT following AS User,
COUNT(*) as f_count
FROM (SELECT following
FROM followers
WHERE follower IN (SELECT follower
FROM followers
WHERE following = 1)) t
GROUP BY following
ORDER BY f_count DESC;
J'ai corrigé vos requêtes, après FROM, vous devez mettre le nom de votre table contenant les colonnes id | abonnés | etc
Le résultat d'une requête est aussi une table, c'est pourquoi je réutilise ces résultats dans les requêtes suivantes, ses sous-requêtes appelées
/* retrieve user 1's followers */
SELECT follower AS U1F FROM NAME_OF_YOUR_TABLE WHERE following = 1;
/* retrieve who each of those users is following */
SELECT following AS U1Ffol FROM NAME_OF_YOUR_TABLE WHERE follower IN
(SELECT follower AS U1F FROM NAME_OF_YOUR_TABLE WHERE following = 1);
/* find out who they're all following *collectively* */
SELECT
following AS User,
COUNT(*) as f_count
FROM (SELECT following AS U1Ffol FROM NAME_OF_YOUR_TABLE WHERE follower IN
(SELECT follower AS U1F FROM NAME_OF_YOUR_TABLE WHERE following = 1))
GROUP BY User
ORDER BY f_count DESC
Oh euh, je ne veux pas en fait plusieurs instructions select séparées. C'était juste pour vous donner une idée de ce qui devait être fait. Merci d'avoir fait l'effort! :)
Vos exemples de résultats semblent être:
SELECT following AS User,
COUNT(*) as f_count
FROM U1Ffol
WHERE 1 IN (follower, following)
GROUP BY User ;
Votre dernière requête de sélection donnera avec succès le résultat attendu. Où est donc le problème?
Selon la structure de votre table, votre dernière requête vous donnera le résultat. Les tableaux en violon et en question sont différents. Quel tableau dois-je considérer pour répondre à cette question?
sqlfiddle.com/#!9/6b5eda/20 Fonctionne parfaitement bien pour moi.
Je pense que vous devez alors publier votre résultat attendu. Parce que votre résultat attendu affiché ici vient du violon ci-dessus.
@AnkitBajpai c'est très difficile à expliquer. C'est pourquoi j'ai posté cette simulation requête SQL pour aider les gens à comprendre ce que j'essaie de réaliser.
S'il vous est difficile d'expliquer, comment pouvez-vous attendre de nous que vous obteniez le résultat correct? Veuillez réfléchir et poster simplement le résultat attendu, nous ferons de notre mieux pour vous donner une solution possible.
@AnkitBajpai en regardant le simulacre de SQL que j'ai fourni avec le résultat attendu ...
Ce résultat ne nous aide pas davantage à comprendre l'énoncé du problème. Surtout «ceux qu'ils suivent le plus».