mboost-dp1

Simpelt mysql spørgsmål


Gå til bund
Gravatar #1 - holmen
28. mar. 2008 08:50
Jeg er rimelig newb til mysql. Så er det på plads.

Jeg vil lave en database som indeholdender alle mine CD'er.

Hvis der er 10 forskellige albums med AC/DC, og jeg ønsker at indtaste Band, Title, Genre og Year, skriver jeg:

mysql> insert into CD (band, title, genre year) values ('AC/DC', 'The Razors Edge', 'Classic Rock', 1990);

(Tabellen er oprettet)

Når det næste album skal indsættes, trykker jeg "pil op" og redigerer de felter der ændrer sig (title og year) og trykker enter.
Dette gentages for samtlige albums.

Findes der ikke en lettere måde, hvor jeg lister alle albums efter hinanden, genre og bandnavn er ens hele vejen, og div. årstal efter hinanden?

Noget i stil med: (band, title, genre year) values ('AC/DC', 'The Razors Edge' 'Ballbreaker' 'etc', 'Classic Rock', 1990 1995 (etc.)); <- Virker ikke.

Er det muligt?

Har googlet, men finder kun løsninger som denne: http://www.desilva.biz/mysql/insert.html

Og så er jeg jo ikke helt ude over problemet...
Kan det gøres, sådan som jeg vil have det gjort?
Gravatar #2 - rackbox
28. mar. 2008 09:30
#1 som jeg læser dit spørgsmål, har det ikke så meget med mysql at gøre, som det handler om interfacet.

Du kan sagtens lave relationsdatabaser, hvor du så at sige gemmer fælles data i en tabel og variable i en anden. Du skal i dette tilfælde have en mellemliggende tabel, der peger på relationerne imellem disse tabeller.

Eks.:

TABLE (band) [id; band_name; band_leadsinger; other_stuff;]
TABLE (genres) [id; genre_name;]
TABLE (albums) [id; album_name; year;]
TABLE (relationer) [id; band_id; genres_id; albums_id;]

Du bruger så (relationer) til at knytte data sammen.

Måske er dit spørgsmål egentlig om, hvordan du putter data i din oprindelige tabel? Hvis du bruger PHP (det er næsten det samme i alle sprog), så kan du lave en parser i stil med


$albums = explode($_POST['albums'],",");


...som så lægger kommaseparerede input i et array, du kan indsætte i tabellen således:


foreach ($albums as $key => $value){
mysql_query("insert into CD values ($band, $value, etc...);
}


Gav det mening? Svarede jeg på det rigtige spørgsmål? Vinder jeg en hest?
Gravatar #3 - holmen
28. mar. 2008 10:20
Jeg har en tabel, den skal opdateres med flere cd'er af samme kunster og i samme genre.

I stedet for at lave det sådan:
INSERT INTO CD (band, title, genre, year)
VALUES
('AC/DC', 'Powerage', 'Classic Rock', 1978),
('AC/DC', 'Back In Black', 'Classic Rock' 1990),
('AC/DC', 'For Those About To Rock' 'Classic Rock' 1981),
(Og så videre);
Tænkte på om det kunne gøre i stil med:
INSERT INTO CD (band, title, genre year) VALUES ('AC/DC', 'The Razors Edge' 'Ballbreaker' 'endnu et albumnavn', 'Classic Rock', 1990 1995 (endnu et årstal));


Ved ikke om du forstod spørgsmålet, eller om det var formuleret forståeligt. Men det burde give lidt mere mening nu.

Du har vundet en hest. Den står på en mark lige uden for Bramming. Den er brun, hedder laika, er rigtig nuzzer og lystrer iøvrigt "LORTEHEST!". Du henter den på eget ansvar.
Gravatar #4 - Xill
28. mar. 2008 11:24
hvis jeg fatter dit spørgsmål så virker det som om at du skal læse om normalisering af database ..
Gravatar #5 - Cyrack
28. mar. 2008 11:47
Xill:

Teknisk set er han layout normaliseret.. på første normal form* :-)

* Forudsat at man accepterer NULL-felter i alle normalformer (dem der ikke gør, har aldrig prøvet at lave database drevne applikationer).
Gravatar #6 - Tyrian
10. apr. 2008 14:35
Holmen har jeg forstået dit spørgsmål rigtigt, hvis jeg mener du leder efter en hurtigere måde at smide data ind i din(e) tabeller på?
Gravatar #7 - Xill
10. apr. 2008 14:43
#5 .. jo men han bør nok gå efter 3NF
Gravatar #8 - Cyrack
10. apr. 2008 16:33
Xill:

Nah, det er overrated... han skal bare have en tabel med en kolonne, så kan han gemme dataene som XML (hvilket jeg desværre har set implementeret i virkeligheden).
Gravatar #9 - arne_v
10. apr. 2008 16:39
#4 & 5

Hvilke af felterne i:
CD (band, title, genre year)
er det I mener overtræder hvilken normaliserings regel ?
Gravatar #10 - Cyrack
10. apr. 2008 16:58
Band og Genre burde ikke være i CD-tabellen, men optræde i selvstændige tabeller, evt. hvor band-tabellen har en alias-tabel (fx. D.A.D har en helt stak aliaser (D-A-D, D:A:D og D.A.D) men opfattes stadig som samme band.

Derfor: CD (id, bandAliasId, genreId, title, publishedDate).
Gravatar #11 - arne_v
10. apr. 2008 17:08
#10

Det er da muligt, at det passer bedre til spørgers problem stilling.

Men det har ikke noget med normalisering at gøre.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login