Avatar billede lolgoff2 Nybegynder
04. december 2001 - 11:31 Der er 11 kommentarer og
1 løsning

DB-struktur

Jeg er relativ ny med brugen af MySQL.

Jeg har en brugerdatabase, hvor der pudsigt nok er personlige oplysninger, herunder email, men jeg har opdaget, at personer ofte har flere email!

Derfor ønsker jeg at oprette en ny tabel med emails, der på en eller anden måde tilknyttes bruger-tabellen.

Jeg har et ID (auto_increment) i brugertabellen - er det dette, der skal bruges.....
Avatar billede Slettet bruger
04. december 2001 - 11:35 #1
du kan jo have em tabel der hedder bruger_emails som har strukturen:

id (auto-increment) user_id email_1 email_2 email_3

og så sætte brugerens id fra brugerdatabasen idn i user_id

En anden måde at løse det på er at lave det med

id (auto-increment) user_id email

og så blot sætte flere poster ind hvis brugeren har flere e-mail adresser.

Jeg vil mene at den første løsning er nemmest, men har brugeren 10 forskellige e-mail adresser kan de måske blive lidt omstændigt. Løsning 2 er jo også ret nem :)
Avatar billede disky Nybegynder
04. december 2001 - 11:35 #2
ja du skal for hver email entry have en brugerID der er = din autoincrement id i din bruger tabel.

så kan du lave en

select * from email where brugerID=77;

For at få alle bruger 77\'s emails.
Avatar billede disky Nybegynder
04. december 2001 - 11:36 #3
el_barto:

meget dum og grim løsning at tillade 3 emails per bruger.

at have en speciel email tabel er langt mere korrekt og har også en højere normal form
Avatar billede Slettet bruger
04. december 2001 - 11:42 #4
disky> Slap nu af, jeg gav ham jo 2 løsninger.

Det er da grimmere at skulle hente fra 2 forskellige tabeller hvis han nu f.eks. kun tillader sine brugere at have max. 3 forskellige mailadresser.

Altså så skulle han først select * from brugertabel for at hente brugerens oplysninger, og bagefter select* from emailtabel where bruger_id = 77
Avatar billede disky Nybegynder
04. december 2001 - 12:02 #5
nej det er ikke grimt det er den korrekte måde at gøre tingene på.

De små krumspring du opfordre til er en dum ide.

Avatar billede Slettet bruger
04. december 2001 - 12:08 #6
disky> krumspring...er du bange for at din løsning ikke bliver brugt?

Som før skrevet gav jeg ham 2 muligheder, den ene magen til din, den anden hvis man vil gøre det lettere for sig selv.

Og den lette er da hurtigere end den \"korrekte\"

Den \"korrekte\" vil kræve 2 MySQL queries, da MySQL endnu ikke understøtter subselect. Men det kommer vist i version 4...

Der er desuden ingen grund til at lavere en relationsdatabase når det ikke drejer som om flere e-mail adresser. Det kommer først til sin ret hvis brugeren f.eks. har 50 forskellige e-mail adresser.

Såh...skulle vi ikke lige vente og se hvor mange forskellige e-mail adresser han havde tænkt på?
Avatar billede disky Nybegynder
04. december 2001 - 12:23 #7
jeg er helt ligeglad med om min løsning bliver valgt.

Jeg ved min løsning er mest korrekt

Forresten er det stadigvæk bedre at lave 2 queries end at låse sig på max 3 email adresser.

Jeg har personligt 4.
Avatar billede Slettet bruger
04. december 2001 - 12:25 #8
låse sig....hm..kunne man monstro blot tilføje x antal felter hvis man vil flytte til f.eks. max 5 foskellige email adresser?

Skal vi blive enige om at din løsning ikke er den hurtigste?
Avatar billede disky Nybegynder
04. december 2001 - 12:29 #9
ja og hvad så med dem som kun har 1 email, så er der plads til 4 emails af max 64 chars spildt.

Hvis du har mange brugere, er det et totalt spild af plads.

Performance mæssigt med en top tunet mysql opdager du ikke forskellen.

Men vi kan blive enige om din ene løsning er et dårligt hack, og viser at designeren ikke har styr på normalformer osv. (hvilket man tit ser i php scripts)
Avatar billede cyberdude Nybegynder
04. december 2001 - 17:35 #10
el_barto & disky ->

Jeg vil da mene at en sådan query vil kunne se sådant her ud

select * from bruger,bruger_email where bruger.id=bruger_email.bruger_id

og hvis der så på en eller anden måde i forvejen er sendt en variabel med enten via klik på et link hvor det indgår i eler via en form der indeholder den brugers id nummer fra bruger tabellen så kan det gøres sådant her!

$hent=mysql_query(\"select * from bruger,bruger_email where bruger_email=$variable AND bruger.id=bruger_email.bruger_id\");
$row_bruger=mysql_fetch_row($hent);
echo \"Bruger $row_bruger[navn] har følgende email adresser<br>\";
while($row=mysql_fetch_array($hent)) {
echo \"$row[email]<br>\";
}

det er bare bikset hurtigt sammen, så jeg vil ikke garentere for at det virker blot ved at \"klistre\" det ind og afprøve!
Avatar billede disky Nybegynder
05. december 2001 - 08:43 #11
netop :)
Avatar billede lolgoff2 Nybegynder
23. december 2001 - 01:22 #12
Tak for hjælpen .)
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
Computerworld tilbyder specialiserede kurser i database-management

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