Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 13:18 Der er 26 kommentarer og
1 løsning

order by flere felter

Jeg har en database (konverteret fra Access) med bl.a. følgende felter:

Arrangement,Artist1,Artist2,Artist3.. osv. til Artist8, samt År.

Til nogle arrangementerne er der kun en artist til andre er alle otte felter i brug. Hvor et eller flere ArtistX felter ikke er i brug er værdien NULL.

Jeg vil gerne trække data ud fra databasen således at jeg har hvert år for sig selv og artisterne sorteret alfabetisk uanset hvilket ArtistX-felt de står i... Hvordan gør jeg dette ?

Spørg endelig hvis jeg ikke har forklaret grundigt nok...

/Brian.
Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 13:20 #1
Jeg har også adgang til PHP, så hvis noget af det er lettere i PHP så bare skriv det...
/Brian.
Avatar billede sito Nybegynder
19. maj 2003 - 13:59 #2
Har hver artist sin egen tabel, og i så fald, hvad indeholder tabellen af feltnavne?
Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 14:01 #3
nej... det er kun en tabel indeholdende bl.a. felterne Arrangement, Artist1..Artist8 og År.
Avatar billede sito Nybegynder
19. maj 2003 - 14:04 #4
Okay, hvordan er arrangementerne og artisterne (og år for den sags skyld) så linket sammen?
Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 14:15 #5
Tabel Arrangementer:

|id|Arrangement|Artist1|Artist2|Artist3|Artist4|Artist5|Artist6|Artist7|Artist8|År|

Jeg er ikke helt sikker på at jeg har forstået hvad du mener ?

/Brian.
Avatar billede peturkirke Novice
19. maj 2003 - 14:31 #6
Du kan ændre tabellen således:

|id|Arrangement|Artist|Nr|År

og bruge ORDER BY År, Artist

hvis ikke du kan bruge det, så må du først lave en sql-forespørgsel således at du får nogenlunde den ovenstående tabel. Derefter gemme dataene i en ny tabel eller bare i et recordset. Derefter en ny forespørgsel som jeg har lavet ovenfor.
Avatar billede sito Nybegynder
19. maj 2003 - 14:37 #7
Det er bare svært at få en udtrækning af artister der optræder til et givent arrangement når det hele er lavet i en tabel.
Mit råd til dig er at du laver en tabel der hedder artister, og en der hedder arrangementer. I tabellen artister kan du så have artist_id, navn osv. og i arrangementer have arrangement_id, arrangement, år osv.
I artist tabellen kan du så sætte et arrangement_id ind, og på den måde få hentet de artister der hører til et specifikt arrangement.

Det kunne ex. gøres ved:

SELECT arrangementer.år, arrangementer.arrangement, artister.navn FROM artister, arrangementer WHERE arrangementer.arrangement_id = 1 ORDER BY navn

Eksempelvis ;)
Håber det hjalp.
/sito
Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 15:22 #8
jeg kan godt se hvad du mener... det virker også meget logisk, men jeg har 14-1500 poster i min tabel, så jeg skal vel næsten lave et script der laver det til to tabeller... Nå, jeg må vel bare i gang... chefen vil snart se resultater... ;-)

/Brian.

Ps: lader lige spørgsmålet stå åbent... det kunne jo være at nogle havde noget at tilføje...
Avatar billede peturkirke Novice
19. maj 2003 - 15:39 #9
men det script tager kun 1 minut at lave
Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 17:50 #10
peturkirke: Du har sikkert helt ret, men jeg kan ikke lige finde ud af det... kan du eventuelt lave et sådant script til mig ?
Avatar billede Brian Moos Lindberg Praktikant
19. maj 2003 - 17:52 #11
hvad er der galt i dette: INSERT INTO arr (`navn`, `sted`, `by`, `aar`, `startdato`, `slutdato`) VALUES ($row[Arrangement], $row[sted],$row[by],$row[aar],$row[startdato],$row[slutdato])
Avatar billede sito Nybegynder
19. maj 2003 - 18:00 #12
Den er der ikke noget galt med. Hvordan ser din SQL ud, hvor du finder arrayet?
Avatar billede sito Nybegynder
19. maj 2003 - 18:02 #13
Måske skal dine værdier i ''.
Avatar billede peturkirke Novice
19. maj 2003 - 19:36 #14
hvis du siger mig, hvordan du vælger at organisere den/de nye tabel/ler, så skal jeg give dig scriptet
Avatar billede sosuadm Nybegynder
20. maj 2003 - 00:10 #15
Avatar billede Brian Moos Lindberg Praktikant
20. maj 2003 - 11:20 #16
Jeg skal gerne have konverteret følgende:

tabel arrangementer:
|id|Arrangement|Artist1|Artist2|Artist3|Artist4|Artist5|Artist6|Artist7|Artist8|Sted|By|Fradato|Tildato|aar|Antal|Noter|A/B|

til følgende:
tabel arr:
|arr_id|navn|sted|by|fradato|tildato|aar|noter|
samt:
tabel artister:
|art_id|navn|arr_id|

Hvordan gør jeg lettest dette... ?

/Brian.
Avatar billede sito Nybegynder
20. maj 2003 - 12:09 #17
Du henter de ting du skal bruge fra arrangement tabellen(SELECT), og laver en ny tabel artister(CREATE), hvor du så smider dem i(INSERT). Husk at slette dem fra arrangement tabellen ;)
Avatar billede Brian Moos Lindberg Praktikant
20. maj 2003 - 12:23 #18
okay... så langt er jeg med... men hvordan linker jeg så artisten til arr_id ? mysql funktionen LAST_INSERT_ID() kan jeg ikke rigtigt gennemskue - og ej heller php-funktionen mysql_insert_id()...
Avatar billede sito Nybegynder
20. maj 2003 - 12:29 #19
Det er jo automatisk gjort, i og med at du har arr_id med i artist tabellen...
Hver artist er så på den måde linket til et arrangment.

For at hente det kan du så bruge

SELECT arrangement.aar, artist.navn FROM artist, arrangement WHERE artist.arr_id = arrangement.arr_id
Avatar billede Brian Moos Lindberg Praktikant
20. maj 2003 - 12:30 #20
- men spørgsmålet går jo på hvordan jeg konverterer den ene tabel til to andre... det andet har jeg fået svar på...
Avatar billede sito Nybegynder
20. maj 2003 - 12:58 #21
Kan du ikke gøre det ved at bruge SELECT, CREATE, INSERT og DELETE, som jeg skrev før? Nej, ok, har prøvet lidt frem og tilbage, og kan godt se den er lidt kringlet. Ved sgu ikke helt hvordan den skal skæres.
Er bange for at du er nød til at starte forfra :(
Har desværre ikke så meget tid i dag, men skal nok tænke videre.
Avatar billede Brian Moos Lindberg Praktikant
20. maj 2003 - 13:00 #22
starte forfra? med hele databasen ? 14-1500 poster ? Der må være en løsning...
Avatar billede sito Nybegynder
20. maj 2003 - 13:09 #23
Ja, det tror jeg også der er.
Prøv:

SELECT * FROM arrangementer

CREATE TABLE arrangement(
      arr_id,
      navn,
      sted,
      bynavn,
      fradato,
      tildato,
      aar,
      noter)

INSERT INTO arrangement(arr_id, navn, sted, bynavn, fradato, tildato, arr, noter)
VALUES ('$id','$arrangement','$sted','$by','$Fradato','$Tildato','$aar','$noter')

CREATE TABLE artister(
      art_id AUTO_INCREMENT,
      navn,
      arr_id)

INSERT INTO artister (navn, arr_id)
VALUES ($artist1, $id)


Og husk at slette dine poster i den gamle database.
Jeg er langt fra sikker på det vil virke, men det er nok det bedste jeg kan gøre for dig. Hvordan har du i øvrigt fået godkent et feltnavn der hedder by? Det er et reserveret ord i SQL, derfor jeg har kaldt den bynavn.
Avatar billede sito Nybegynder
20. maj 2003 - 13:10 #24
INSERT INTO artister (navn, arr_id)
VALUES ('$artist1', '$id')
Avatar billede Brian Moos Lindberg Praktikant
20. maj 2003 - 15:08 #25
Det lykkedes at få det til at fungere... tak for hjælpen alle sammen... nogen der vil have point ?
Avatar billede sito Nybegynder
20. maj 2003 - 15:25 #26
Jeg vil da gerne have point, hvis du kunne bruge noget af det jeg har skrevet til dig? Hvordan fik du det til at virke?
Avatar billede Brian Moos Lindberg Praktikant
11. juni 2003 - 10:48 #27
havde helt glemt dette spg... så er der point...
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