Query tra 3 tabelle

Tommy03

Utente Attivo
6 Giu 2018
440
45
28
17
Bassano del Grappa (VI)
Salve a tutti, avrei bisogno di un favore. Ho queste quattro tabelle:
-user (userid,username,...)
-follow (follower,following)
-eventi (eventid,sport,descrizione,...)
-puntate (userid,eventid,...)
In sostanza funziona così: un utente si iscrive e i suoi dati vengono inseriti nella tabella user, con il campo userid che è un BIGINT(50). Quando inizia a seguire qualcuno, il suo userid viene inserito in "follower", mentre quello della persona che segue in "following" e viceversa se viene seguito. Poi c'è la tabella eventi, che ha diversi campi che vengono da me completati manualmente e il campo eventid è BIGINT(50). Infine quando un utente esegue una "puntata", il suo userid personale viene inserito nell'apposito campo della tabella "puntate", e dato che la puntata è riferita a un evento preciso, l'eventid di quell'evento viene inserito nel campo eventid della tabella "puntate".
Fin qui tutto OK, però ho creato una pagina in cui si possono filtrare gli eventi in diversi modi, e vorrei aggiungere un filtro con il quale vengono presentati ad un utente X tutti gli eventi per i quali vi è un record nella tabella con l'eventid di quell'evento e l'userid di una persona che X segue.
Sapete suggerirmi qual è la query corretta?
Io ho già provato utilizzando dei cicli, ma mi piacerebbe sapere se è possibile farlo soltanto con una semplice query.
Grazie mille e buona giornata.
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
riscrivo come l' ho capita io,

-user (userid,username,...)
-eventi (eventid,sport,descrizione,...)
-follow (follower,following)
-puntate (userid, eventid,...)

un utente X si iscrive e i suoi dati vengono inseriti nella tabella user(X.userid)

Quando inizia a seguire qualcuno Y, il suo userid viene inserito in follow(X.follower)
mentre quello della persona che segue in follow(Y.following)

e vorrei aggiungere un filtro per utente X
tutti gli eventi per i quali vi è un record nella tabella con l'eventid di quell'evento e l'userid di una persona Y che X segue.

da cui l'esempio
1586080885268.png


ed il risultato
1586080979918.png


ho usato questa query,
SQL:
select t.follower, x.username, t.following, y.username, t.eventid, e.descrizione from(
select f.follower, f.following, p.eventid
from follow f, puntate p
where p.userid = f.following
and f.follower = 11
) t
left join user x on t.follower = x.userid
left join user y on t.following = y.userid
left join eventi e on t.eventid = e.eventid
a cui puoi aggiungere ulteriori filtri nella clausola where esistente
e (se serve) aggiungendone un'altra se vuoi filtrare elementi delle anagrafiche, a seguire le left join

in realtà, se ho capito ciò che vuoi estrarre, la select agisce su 2 tabelle e aggancia le 2 (3) anagrafiche