Du skal bare tjekke om brugern står på listen i forvejen...
Når brugeren forsøger at tilføje en ven på listen køre du bare den her:
<?PHP $sql = mysql_query("SELECT * FROM din_tabel WHERE din_row = '".$enVariabelDerIndeholderNoget."'"); if($sql) { //Giver brugeren en fejlbesked om at de er venner.. echo "fejl..."; } else { // brugeren er ikke på listen, så her kan vi tilføje ham. mysql_query("INSERT INTO din_tabel...."); } ?>
Forudsætning : Du har en tabel, Person, hvor hver person har en Person_ID og en tabel Venskab, som kæder personer sammen via 2 Person_ID'er. - Venskab_ID - Person1_ID - Person2_ID.
Så kan du sikre dig mod dubletter i venskaberne med CREATE UNIQUE INDEX MyUniqueIndex ON Venskab (Person1_ID , Person2_ID)
Så kan du være sikker på, at du aldrig vil få dobbelte venskaber, uanset hvilke programmeringsfejl du kommer til at lave. Eller hvis du fjumrer med et dbadmin-vørktøj.
Det er god praksis at sikre sin database på den måde.
I dit program kan du så stadig vælge at checke inden du laver insert eller du kan starte med insert og checke bagefter, om det gik godt.
Databaser giver mulighed for at sætte et krav om at et eller flere felter skal være unikke. Det sker eks. gennem primærnøglen (som vel egentlig burde være de to ID-numre sammenlagt), eller med et UNIQUE indeks der forlanger den samme kombination ikke optræder to gange. I begge tilfælde vil den fejl hvis samme værdi forsøges indsat to gange.
Hvis samme record skal gælde begge veje - altså, hvis ven1 skal optræde på ven2's liste og omvendt med blot en enkelt række - så kommer du ikke udenom en SELECT med mindre du altid placerer det mindste ID først (eller sidst - sådan set lige meget hvilken af de to du vælger, så længe du er konsekvent). Hvis der derimod skal være 2 records før begge står som venner af hinanden, er der sandsynligvis ingen grund til ikke bare at lade de to felter udgøre primærnøglen, i hvilket tilfælde INSERT'en vil fejle automatisk. Et UNIQUE indeks kunne også bruges med samme resultat, men så skal der jo være en anden primærnøgle - og det giver sjældent mening i en venne-tabel.
I øvrigt kan de to felter (og bør det nok) også benyttes som primærnøgle hvis samme record skal gælde begge veje - men du skal som sagt enten lave et check inden du indsætter, eller altid placere ID'erne så det mindste af de to står i samme felt hver gang.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.