|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2006
Città: Battipaglia
Messaggi: 510
|
[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
__________________
iMAC PRO XeonW 32GB // Samsung S21 Ultra // PS5 // Synology DS218+ TRATTATIVE concluse: neorunner,Luca.81,macca_BD,leleweb,frax289,Hnk,pitro,filosofo24,ivvo,papaiti,ale.zak91 Seguimi su http://blog.webeats.it |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
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).
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2006
Città: Battipaglia
Messaggi: 510
|
Quote:
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)
__________________
iMAC PRO XeonW 32GB // Samsung S21 Ultra // PS5 // Synology DS218+ TRATTATIVE concluse: neorunner,Luca.81,macca_BD,leleweb,frax289,Hnk,pitro,filosofo24,ivvo,papaiti,ale.zak91 Seguimi su http://blog.webeats.it |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
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)
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2006
Città: Battipaglia
Messaggi: 510
|
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) Codice:
$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] "); } } 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
__________________
iMAC PRO XeonW 32GB // Samsung S21 Ultra // PS5 // Synology DS218+ TRATTATIVE concluse: neorunner,Luca.81,macca_BD,leleweb,frax289,Hnk,pitro,filosofo24,ivvo,papaiti,ale.zak91 Seguimi su http://blog.webeats.it |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
A quel punto meglio se usi una IN di MySQL
SELECT * FROM tabella WHERE IN(ID1, ID2, ID3, ID4) ![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2006
Città: Battipaglia
Messaggi: 510
|
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! ![]()
__________________
iMAC PRO XeonW 32GB // Samsung S21 Ultra // PS5 // Synology DS218+ TRATTATIVE concluse: neorunner,Luca.81,macca_BD,leleweb,frax289,Hnk,pitro,filosofo24,ivvo,papaiti,ale.zak91 Seguimi su http://blog.webeats.it |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Subqueries
![]() Facci sapere ![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2006
Città: Battipaglia
Messaggi: 510
|
allora sembra che anche la tua query va molto bene. l'ho sviluppata così:
Codice:
SELECT friends.fromid FROM friends WHERE fromid IN($_SESSION[id],$row_id[id]) GROUP BY fromid 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?
__________________
iMAC PRO XeonW 32GB // Samsung S21 Ultra // PS5 // Synology DS218+ TRATTATIVE concluse: neorunner,Luca.81,macca_BD,leleweb,frax289,Hnk,pitro,filosofo24,ivvo,papaiti,ale.zak91 Seguimi su http://blog.webeats.it |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
|
Quote:
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 ![]()
__________________
IT Developer at Hardware Upgrade S.r.l. self.love(this.me()); |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:53.