miklos ha scritto:per quanto riguarda il sistema a due tabelle io farei cosi.
Siccome la tabella richieste deve essere facilmente accessibile dall'utente destinatario farei una tabella con tre campi:
quindi per inserire una richiesta il richiedente fa una insert di questo tipo:
Codice: Seleziona tutto
$aggiungi="INSERT INTO richiesta_amicizia (utente,richiedente) VALUES ('{$id}','{$_SESSION['id']}')'";
per vedere le richieste pending:
Codice: Seleziona tutto
select * from richiesta_amicizia where utente = '{$_SESSION['id']}';
per quanto riguarda l'accettazione per semplificare la logica, tenendo presente che l'overead e' minimo farei cosi':
Codice: Seleziona tutto
$accetta=""INSERT INTO amicizie (amico1,amico2) VALUES ('{$id}','{$_SESSION['id']}')";
$accetta2=""INSERT INTO amicizie (amico1,amico2) VALUES ('{$_SESSION['id']}','{$id}')"; //in questo modo crei una relazione bidirezionale facilmente interrogabile
$togli="DELETE FROM richiesta_amicizia WHERE id={quello della richiesta che hai clickato};
per rifiutare la richiesta:
Codice: Seleziona tutto
$togli="DELETE FROM richiesta_amicizia WHERE id={quello della richiesta che hai clickato};
una volta fatto questo per vedere gli amici di un utente farai cosi:
Codice: Seleziona tutto
select * from amicizie where amico1 = '{$_SESSION['id']}
per vedere se un utente e' tuo amico puoi fare cosi:
Codice: Seleziona tutto
select count(1) from amicizie where amico1 = '{$_SESSION['id']}' and amico2 = '{$id}'
infine per eliminare una relazione invece:
Codice: Seleziona tutto
delete from amicizie where amico1 = '{$_SESSION['id']}' and amico2 = '{$id}'
delete from amicizie where amico1 = '{$id}' and amico2 = '{$_SESSION['id']}'
spero di essere stato d'aiuto, le query possono sicuramente essere ottimizzate e ridotte a singoli statement (tipo le insert e le delete multiple), pero' ho preferito fare cosi' per mostrare meglio il meccanismo che avevo in mente
ciauuuu
Ci sono alcune cose a me non chiare.
Codice: Seleziona tutto
$aggiungi="INSERT INTO richiesta_amicizia (utente,richiedente) VALUES ('{$id}','{$_SESSION['id']}')'";
I campi non erano 3 ?
Il campo id è auto incrementante ?
Nel dubbio io ho fatto così:
Codice: Seleziona tutto
$aggiungi="INSERT INTO richiesta_amicizia (id,utente,richiedente) VALUES ('{$_SESSION['id']}','{$id}','{$_SESSION['id']}')";
Codice: Seleziona tutto
select count(1) from amicizie where amico1 = '{$_SESSION['id']}' and amico2 = '{$id}'
Questo mi fa vedere se io sono suo amico, ma a me serve anche la condizione per vedere se l'amicizia è in sospeso in modo da poter restituire 0 e far stampare nella pagina "Amicizia in sospeso"
Quindi per ora è così:
Codice: Seleziona tutto
function controlla_amicizia($id)
{
controlla_id($id);
$query="SELECT COUNT(1) AS trovato FROM amicizie WHERE amico1='{$_SESSION['id']}' AND amico2='{$id}'";
$ris=mysql_query($query) or die(mysql_error());
$dati=mysql_fetch_assoc($ris);
if($dati['trovato'] == 0)
//Non amico
return -1;
elseif($dati['trovato'] > 0)
return 1;
//Quì manca la condizione per ritornare 0 cioè per dire che la richiesta è in sospeso
}
Per vedere gli amici di un utente non dovrei fare così ?
Codice: Seleziona tutto
$query="SELECT * FROM amicizie WHERE amico1='{$id}' OR amico2='{$id}'";
Ah, una curiosità, com'è meglio ?
'{$id}' o '$id' ?
Grazie per le eventuali risposte.