Ich kann nicht Ereignis die Frage in Englisch zu gut zusammenfassen, so die Umwandlung zu SQL ist verwirrend mich.Schlage vor, wem ich folgen sollte, basierend auf den Leuten, die mir folgen, folge mir selbst
Ich habe eine Benutzertabelle und eine Folgetabelle
USER
id | first_name | last_name
10 | Homer | Simpson
12 | Marge | Simpson
14 | Bart | Simpson
16 | Lisa | Simpson
FOLLOW
id | follow_id | follower_id | status
1 | 10 | 12 | APPROVED
2 | 10 | 14 | APPROVED
3 | 16 | 12 | APPROVED
4 | 16 | 14 | APPROVED
Grundsätzlich ich einen Benutzer vorschlagen will, andere Menschen, die er folgen mögen.
Ich werde dies auf Basis:
- alle Leute, mir zu folgen finden und wenn ich nicht schon bin ihnen zu folgen, schlage ich ihnen folgen
- aus dieser ersten Liste (die folgen me), finden alle Menschen, dass sie
- für jede dieser folgen, lassen vermuten, dass ich diese Personen folgen (wenn ich nicht schon tue so)
Ist jemand in der Lage mich in die richtige Richtung zu helfen ?
In den obigen Beispieldaten
- Homer bereits von Marge und Bart verfolgt wird
- wiederum Marge folgt Lisa (und Bart ist auch Lisa folgende)
So, in diesem Beispiel möchte ich Homer vorschlagen gerne folgen:
- Marge (weil sie folgt ihm)
- Bart (weil er ihm folgt)
- Lisa (weil sie von Marge verfolgt wird)
MIT HILFE VON RICHARD, DIES IST DIE ENDLÖSUNG (AS A STORED PROC)
Die einzige Ergänzung ist die Entfernung von Benutzern, die bereits befolgt werden.
BEGIN
SELECT DISTINCT t1.ID,first_name,last_name FROM
(
#Users that are following me
SELECT u.id as ID, u.first_name , u.last_name
FROM mchq_user u
INNER JOIN follow AS f ON u.id = f.follower_id
WHERE f.follow_id = in_userID
UNION
#Users followed by followers of me
SELECT f2.follow_id as ID, u2.first_name, u2.last_name
FROM mchq_user u
INNER JOIN follow AS f ON u.id = f.follower_id
INNER JOIN follow AS f2 ON f2.follower_id = u.id
INNER JOIN mchq_user AS u2 ON u2.id = f2.follow_id
WHERE f.follow_id = in_userID AND f2.follow_id != in_userID
) AS t1
WHERE t1.Id NOT IN (
# Users that I follow already
SELECT u.id
FROM mchq_user u
INNER JOIN follow AS f ON u.id = f.follow_id
WHERE f.follower_id = in_userID
);
END
Haben Sie eine SQL-Abfrage oder eine Arbeit haben Sie bereits getan haben, zu betrachten und bieten Beratung zu? "Kann mir jemand in die richtige Richtung helfen?" ist keine detaillierte Frage oder Beschreibung des Problems, das Sie haben. – Dresden