Gestire amici

leon-kennedy

Utente Attivo
19 Mag 2010
147
0
0
Ciao a tutti...dovrei far gestire ai miei utenti i loro amici,ma come posso struttura una tabella del db per fare questo?

Dovrei creare una tabella per ogni utente ???
 
Dipende come deve funzionare il sistema di amicizia: deve essere come Facebook (se A è amico di B, allora B è amico di A) oppure come Twitter (A segue B, ma B non deve per forza seguire A)? Le amicizie devono essere confermate?
 
Ti consiglio allora di creare una tabella chiamata friendships con la seguente struttura:
  • id INT AUTO_INCREMENT
  • user1 INT
  • user2 INT
  • confirmed ENUM('0','1')
Il primo campo è un identificativo univoco che rappresenta la richiesta di amicizia, che potrai, ad esempio, usare per cancellarla (come query nell'URL).
Il secondo e il terzo campo rappresentano i due utenti coinvolti nella richiesta di amicizia (conterrà gli ID degli utenti). L'unica pecca di questo sistema è che quando effettui una query per controllare se l'utente A è amico di B, dato che potrebbe essere contenuto sia nel campo user1 che in quello user2 il codice SQL dovrà essere qualcosa come:
Codice:
SELECT * FROM friendships WHERE (user1 = 'A' AND user2 = 'B') OR (user1 = 'B' AND user2 = 'A')
Ti consiglio, quindi, di creare una funzione per automatizzare questa operazione, o ancora meglio un oggetto user.
Il quarto e ultimo campo conterrà 0 se la richiesta di amicizia non è stata confermata, 1 se è stata confermata.

Che ne pensi? Può funzionare?
 
Si per confermare/rifiutare richieste mi smebra giusta come struttura,ma per avere la lista degli amici di un user,come si può fare?? :\
 
Avrai bisogno di una classe simile a questa:
PHP:
<?php
class user
{
	public function __construct()
	{
		// recuperi i dati dell'utente e li memorizzi nelle proprietà della classe
	}
	
	public function getFriends()
	{
		// supponiamo che $db sia un'istanza di PDO
		
		$stm = $db->prepare('SELECT * FROM friendships WHERE user1 = :id OR user2 = :id');
		$stm->execute(array(':id' => $this->id));
		
		$friendships = array();
		
		foreach($stm->fetchAll() as $row)
		{
			if($row['user1'] == $this->id)
				$friendships[] = $row['user2'];
			else
				$friendships[] = $row['user1'];
		}
		
		return $friendships;
	}
}
?>
 
Ok,grazie!
Potresti spiegarmi più dettagliatamente queste righe e dirmi se ho capito bene::)
PHP:
$stm = $db->prepare('SELECT * FROM friendships WHERE user1 = :id OR user2 = :id'); 
$stm->execute(array(':id' => $this->id)); 
         
$friendships = array(); //qui indichiamo che $friendships è un array
         
foreach($stm->fetchAll() as $row) 
{ 
if($row['user1'] == $this->id)  //se user1 è uguale all'attuale id prendo gli amici in user2
$friendships[] = $row['user2']; //altrimenti faccio il contrario
else 
$friendships[] = $row['user1']; 
} 
return $friendships; //restituisce gli amici
} 
} 
?>
 
Ok,grazie! :)
Per recuperare i dati invece devo usare il var?Perchè non ho grande domistichezza con la programmazione a oggetti!0:)
PHP:
var $id;
var $email;
var $user1;
var $user2;
var $amico;
var $letta;
 

Discussioni simili