Avatar billede madsens90 Praktikant
26. oktober 2007 - 12:54 Der er 10 kommentarer og
1 løsning

Kun én row i samme tabel med samme oplysninger

Hvordan laver man så der kun kan være én row i ens database med samme oplysninger ??

vil lave noget med at man kan have venner på ens profil, og man skal jo ikke kunne tilføje en mere end én gang. :P

Går ud fra at det er noget man skal lave lige før at den tilføjer til databasen. :P
Avatar billede uggi16 Nybegynder
26. oktober 2007 - 13:02 #1
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....");
}
?>
Avatar billede sherlock Nybegynder
26. oktober 2007 - 13:10 #2
For at sikre mod invalide data, bør du lave et unikt index.

CREATE UNIQUE INDEX MyUniqueIndex
    ON prod_batch (ven1_id , ven2_id)
Avatar billede uggi16 Nybegynder
26. oktober 2007 - 13:11 #3
sherlock > Det der ville jeg gerne se en "jeg-stod-af"-fil på :)
Avatar billede madsens90 Praktikant
26. oktober 2007 - 13:12 #4
Hvad mener du med det sherlock ??

Jeg er ikke alt for genial til det her ? :P

Uggi16.. prøver det lige. ;)
Avatar billede uggi16 Nybegynder
26. oktober 2007 - 13:19 #5
Gør du bare... jeg blev også forvirret hehe..
Avatar billede sherlock Nybegynder
26. oktober 2007 - 13:23 #6
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.
Avatar billede pidgeot Nybegynder
26. oktober 2007 - 13:24 #7
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.
Avatar billede pidgeot Nybegynder
26. oktober 2007 - 13:27 #8
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.
Avatar billede madsens90 Praktikant
18. august 2010 - 16:09 #9
uggi16.. Det er længe siden, men endte med bare at gøre som du forslog. ;) Så hvis du stadig har en bruger her på siden, så kom med et svar. hehe
Avatar billede madsens90 Praktikant
29. november 2010 - 18:42 #10
Svar?
Avatar billede madsens90 Praktikant
20. juni 2011 - 14:42 #11
Lukker her.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester