Avatar billede jensgram Nybegynder
26. november 2003 - 11:42 Der er 9 kommentarer og
1 løsning

Varierende felter - hvordan og hvorledes?

Hejsa.

Jeg har brug for en db-tabel, hvor der skal være skiftende felter. Derfor har jeg oprettet de felter, der _altid_ skal være der:

id
name
category
filename
downloads

... samt et ekstra felt, der kan indeholder det resterende:

additional

Så langt så godt!



Nu er problemet, at jeg gerne vil kunne lave noget á la:

additional:

size=12654;
noget="en eller anden tekst";

osv.


Jeg kan jo også sagtens hente additional og bruge

explode(";\n", $row['additional']);

til at dele linierne.


Men:

1) Hvordan laver jeg additional om til et array:

    ['size'] => (int) 12654,
    ['noget'] => (string) "en eller anden tekst"

2) Kan det hele laves smartere? Hvis ja, hvordan?
  2.b) Er det dumt at benytte linieskift og ; (additional er TEXT)

3) Kan man på nogen måde få MySQL-databasen til selv at gøre det hårde arbejde og trække 'size' og 'noget' ud som kolonner?


Jeg håber på et sagligt svar, så jeg kan få løst problemet optimalt og mest skalérbart!

På forhånd tak.



PS: Jeg har postet dette indlæg i MySQL-kategorien selvom løsningen kan blive ren PHP. Jeg tror dog ikke at jeg er den eneste, der har haft dette problem, så der er sikkert nogle her, der ved noget...
Avatar billede arne_v Ekspert
26. november 2003 - 12:07 #1
Jeg ville nok lave en tabel struktur som:

main
----
id
name
category
filename
downloads

support
-------
id
attribute
value
Avatar billede jensgram Nybegynder
26. november 2003 - 12:35 #2
Ja, det var selvfølgelig en mulighed - så er de jo relateret via id!

Men, man kan vel stadig ikke hive dem ud som:

id | name | category | filename | downloads | attribute1 | attribute2
---+------+----------+----------+-----------+------------+----------
1  | test | kategori | fil.html | 256      | value1    | value2


Eller hvad?
Avatar billede arne_v Ekspert
26. november 2003 - 14:01 #3
Nej.

Men det er også svært at bruge til noget fornuftigt.

Typisk vil det vel skulle laves mere a la:
  xxxxxxxx
    attr 1
    attr 2
  yyyyy
    attr 1
  zzzzz
    attr 1
    attr 2
    attr 3
Avatar billede jensgram Nybegynder
26. november 2003 - 23:23 #4
Det skal lige siges, at jeg kender "felt-navnene", når jeg henter...

Kan man så hente noget lign.:

id | name | category | filename | downloads | attribute1 | attribute2
---+------+----------+----------+-----------+------------+----------
1  | test | kategori | fil.html | 256      | value1    | value2

???


PS: Kan ikke lige se hvad

  xxxxxxxx
    attr 1
    attr 2
  yyyyy
    attr 1
  zzzzz
    attr 1
    attr 2
    attr 3

illustrerer
Avatar billede arne_v Ekspert
27. november 2003 - 07:57 #5
Det illusterer som jeg ser data.
Avatar billede jensgram Nybegynder
27. november 2003 - 11:12 #6
Ok -  så ser jeg det vist ikke på samme måde ;)
Avatar billede jensgram Nybegynder
27. november 2003 - 13:19 #7
arne_v > Ville det i stedet være en mulighed blot at have én tabel:



did // download-id
attribute // eg. name, category, filename, downloads e.a.
value // værdien for attribute

???

Eller er det smartest med én tabel med de felter der altid er og én med ekstra?
Avatar billede arne_v Ekspert
27. november 2003 - 13:26 #8
Løsningen med to tabeller er den mest ralationelle.

Dit sidste forslag går ud på at pakke den første tabel ned i den anden
ved igen at mappe felt værdier til records.

Det kan man godt.

Du kan lave det på flere måder i MySQL og stadig få det til at rigtig
ud i PHP.
Avatar billede jensgram Nybegynder
28. november 2003 - 02:06 #9
OK! Takker for gennemgangen, Arne...

Hvis du smider et svar så er der points på vej.
Avatar billede arne_v Ekspert
28. november 2003 - 07:39 #10
ok
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