View Full Version : [PHP/MYSQL] selezione lista amici in comune
Salve ragazzi,
ho un problema con una query. ho necessità di crearmi un array con gli amici in comune
la tabella è strutturata nel seguente modo
id toid fromid
1 1 2
2 2 1
3 1 3
4 3 1
.. .. ..
e così via
quindi per ogni amicizia c'è andata e ritorno (:P)
come posso strutturare la query in modo che esca un array con la lista di id in comune di $_SESSION[id] (vitatore) $_GET[iduser] (visitato)?
Ringrazio tutti in anticipo
Nello
Salve ragazzi,
ho un problema con una query. ho necessità di crearmi un array con gli amici in comune
la tabella è strutturata nel seguente modo
id toid fromid
1 1 2
2 2 1
3 1 3
4 3 1
.. .. ..
e così via
quindi per ogni amicizia c'è andata e ritorno (:P)
come posso strutturare la query in modo che esca un array con la lista di id in comune di $_SESSION[id] (vitatore) $_GET[iduser] (visitato)?
Ringrazio tutti in anticipo
Nello
Devi estrarre TUTTE le corrispondenze dove c'è visitatore (SESSION) e visitato (USER ID) ?
Se si bastano un normale AND o OR sulla Query, dipende da cosa vuoi che ritorni; prova ad specificare meglio la richiesta (non tanto il problema, che è presentato in maniera completa).
Devi estrarre TUTTE le corrispondenze dove c'è visitatore (SESSION) e visitato (USER ID) ?
Se si bastano un normale AND o OR sulla Query, dipende da cosa vuoi che ritorni; prova ad specificare meglio la richiesta (non tanto il problema, che è presentato in maniera completa).
ti ringrazio in primis per la risposta.
veniamo alla richiesta. come risultato voglio tutti gli id degli amici che abbiamo in comune
esempio pratico, così mi spiego ancora meglio. uso la tabella di prima
id toid fromid
1 1 2
2 2 1
3 1 3
4 3 1
se io (che ad esempio ho id 2) visito la pagina della persona con id 3, l'output della query che mi interessa dovrebbe essere 1 (amicizia in comune)
ti ringrazio in primis per la risposta.
veniamo alla richiesta. come risultato voglio tutti gli id degli amici che abbiamo in comune
esempio pratico, così mi spiego ancora meglio. uso la tabella di prima
id toid fromid
1 1 2
2 2 1
3 1 3
4 3 1
se io (che ad esempio ho id 2) visito la pagina della persona con id 3, l'output della query che mi interessa dovrebbe essere 1 (amicizia in comune)
LOL mi dicevi le amicizie in comune capivo al volo, perdonami ma alle 20 di sera dopo una giornata di lavoro inizio a perdere qualche colpo.
La strada è semplice; tu hai 2 dati sicuri:
A) l'ID del tuo profilo
B) l'ID del profilo che stai visitando
Ora devi estrarre TUTTI gli utenti che contiene l'ID della colonna (toid); non vedo la difficoltà, basta un SELECT * FROM tabella WHERE toid = VALORE;
Forse sono io che sono ko ma mi pare che la terza colonna non abbia senso di esistere se necessiti dei soli amici in comune; se invece la terza colonna corrisponde SEMPRE al tuo ID e ti serve per un controllo di sicurezza integra un AND dopo il WHERE.
Ci siamo? (entrambi però :P)
ahah non lo dire a me
in effetti è vero, le uniche cose sicure sono
A) l'ID del tuo profilo (che sta in $_SESSION[id])
B) l'ID del profilo che stai visitando (che sta in una variabile $row_visitato[id])
facendo la query che dici tu, cioè "SELECT * FROM tabella WHERE toid = VALORE;"
vengono printati si tutte le amicizie, ma non solo quelle in comune come serve a me
guarda quest'altra strada (che non so perchè non funziona)
avevo provato anche questa strada qui (sicuramente moooolto più avida di risorse)
$amicizie_visitato = mysql_query("SELECT toid FROM friends WHERE fromid = '$_GET[id]' ");
$amicizie_visitatore = mysql_fetch_array(mysql_query("SELECT toid FROM friends WHERE fromid = '$_SESSION[id]' "));
print("<br /><br />Amicizie $_GET[id] ");
while($rowamc1 = mysql_fetch_array($amicizie_visitato)){
if(array_search($rowamc1["toid"],$amicizie_visitatore) === TRUE){
print(" $rowamc1[toid] ");
}
}
in poche parole avevo pensato di mettere in $amicizie_visitatore gli id degli amici del visitatore e fare un check amicizia per amicizia del VISITATO se erano contenute in questo array.
oppure ancora un'altra soluzione poteva essere quella di fare
un array delle amicizie del visitatore, uno di quelle del visitate e poi fare un intersezione dei 2 array
sto perdendo colpi
A quel punto meglio se usi una IN di MySQL
SELECT * FROM tabella WHERE IN(ID1, ID2, ID3, ID4)
:)
ho risolto con questa query qui. a chi può interessare/servire
SELECT TC.fromid FROM
(SELECT fromid FROM friends WHERE toid='$_SESSION[id]') TC JOIN
(SELECT fromid FROM friends WHERE toid='$row_id[id]') TP ON TC.fromid=TP.fromid
però provo anche la tua soluzione! :D
Subqueries :)
Facci sapere :D
Subqueries :)
Facci sapere :D
allora sembra che anche la tua query va molto bene. l'ho sviluppata così:
SELECT friends.fromid FROM friends WHERE fromid IN($_SESSION[id],$row_id[id]) GROUP BY fromid
ho messo il group by per eliminare le occorrenze.
però ho 2 domande:
1) ho provato a fare un join per prendere anche l'username dalla tabella users, ma con questo metodo non ci riesco proprio
2) a livello computazionale è meglio l'IN vero?
allora sembra che anche la tua query va molto bene. l'ho sviluppata così:
SELECT friends.fromid FROM friends WHERE fromid IN($_SESSION[id],$row_id[id]) GROUP BY fromid
ho messo il group by per eliminare le occorrenze.
però ho 2 domande:
1) ho provato a fare un join per prendere anche l'username dalla tabella users, ma con questo metodo non ci riesco proprio
2) a livello computazionale è meglio l'IN vero?
Ti rispondo al contrario, prima la 2 poi la 1.
2) Non lo so, non so che algoritmi usa MySQL e ho il terrore a guardarli sinceramente. Su PGSQL sicuramente è il TOP per questo genere di lavori (ti riserva di ciclare una query o di usare un AND ogni volta...); alternativa sarebbe il = ANY () ma non funziona proprio come la IN (anzi si usano in circostanze completamente opposte e diverse).
1) la JOIN la puoi fare, dipende come la strutturi ovviamente ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.