E' natale lo so... ma ho un problema su una query :S

danielloantonio

Utente Attivo
20 Lug 2012
110
0
0
Salve,

prima di tutto auguri a tutti e scusate il momento meno opportuno per postare :) ma ho un problema con una query che ho trovato in un vecchio progetto a cui stavo lavorando...

Tabella posts
id, user, message.....
Tabella friendship
id, x, y (x chi invia la richiesta, y chi la riceve)
Eccola: "SELECT * FROM posts LEFT JOIN friendship ON posts.user=friendship.y WHERE (friendship.x='$id' OR posts.user = '$id') ORDER BY -time LIMIT 50" (dove $id è l'id dell'user loggato al momento)

Dovrebbe, perche non va, selezionare solo i post dei miei amici (dichiarati nella tabella friendship) da tutti uelli presenti nel database e, ovviamente, anche i post che ho condiviso io! Ma le righe restituite sono 0...

Come posso risolvere???

Inolte pensavo, e scusate l'ignoranza ma non riusciro mai a capire il JOIN...., se ho capito bene questa query restituisce i post solo quando l'utente che ha condivisio quel post è la Y della tabella friendship... ma a me interessa prendere tutti quelli degli amici indifferentemente se x sono io e y e lui o se x e lui e y sono io! Erro?

Grazie mille a tutti e scusate ancora il disturbo! :P
 
PHP:
$strquery="SELECT * FROM stato INNER JOIN utenti ON idemail=email WHERE '$myemail'=stato.idemail OR stato.idemail IN (SELECT email2 FROM friendship, utenti WHERE email1 = '$myemail' AND email2 = email) OR stato.idemail IN (SELECT email1 FROM friendship, utenti WHERE email2 = '$myemail' AND email1 = email) ORDER BY time DESC";

Questo lo avevo già pronto e funzionante..cambia solo email1 e email2 con x e y e prendo anche i dati di tutti gli utenti che hanno pubblicato qualcosa.. Ovviamente ci deve essere una tabella utenti.
Potresti facilmente adattarlo.
 
Ma non è troppo elaborata? Ripeto non so niente di JOIN...

LA QUERY QUINDI DOVREBBE ESSERE :
$strquery="SELECT * FROM posts INNER JOIN friendship ON x='$id' WHERE '$id'=posts.user OR posts.user IN (SELECT y FROM friendship, users WHERE x = '$id' AND y = ??????????????) OR posts.user IN (SELECT x FROM friendship, users WHERE y = '$id' AND x = ???????) ORDER BY time DESC";
???

Non ci capisco niente :S

Potresti chiarirmi nei vari passaggi cosa fa?
Grazie mille cmq per avermi risposto :)
 
Ok diciamo che guardando bene .a query ho "risolto"...

Eccola:
$postsquery = mysql_query("SELECT * FROM posts LEFT JOIN friendship ON posts.user=friendship.y WHERE (friendship.x='$id OR posts.user = '$id')");

Ed effettivamente prende solo i post di cui sono amico!
Questo pero solo se sono stato io an inviare la richiesta di amicizia cioè nella tabella friendship io sono x e il mio amico è y! Se inverto i due valori stampa solo i miei post!
C'è un modo per risolvere o quando inserisco l'amicizia nel db devo per forza mettere due valori cioè x=io y=l'altro e x=l'altro y=io????

Inoltre se inserisco ORDER BY -time LIMIT 50 non funziona più
Sarà che devo mettere ORDER BY posts.time DESC LIMIT 50 ????

Grazxie a tutti
 
Anche se in effetti potrebbe andare bene xk io non voglio fare una vera e propria amicizia ma piu un "followind" come twitter... quindi chi segue (la x) puo vedere i post della y cioè di chi sta seguendo ma la y non puo vedere quelli dlla x ! così se la y vuole vedere i post della x deve seguirla e quindi si inserisce nel dd un'altra riga!
Giustoo?!?! Ahah
 
Allora si in questo caso è esatta in quanto devi selezionare solo i post di quelli che segui.
 

Discussioni simili