26. februar 2004 - 23:38Der er
13 kommentarer og 1 løsning
Sortering ud fra komma-separeret id-liste, med og uden dubletter
Hej Eksperter!
Jeg har 4 tabeller i en database. Den underste tabel (show_redskab) indeholder (id, navn).
Den næste (show_program) indeholder (id, navn, redskaber) hvor (redskaber) er en komma-separeret liste af show_redskab-id'er.
I næste to tabeller refererer så videre fra de forgående med id-lister osv. Det er sådan lidt rodet! :)
Når jeg nu henter (redskaber) fra show_program (den komma-separerede liste), hvordan får jeg så lettest, og hurtigst, en liste tilbage fra MySQL der indeholder de redskaber der skal bruges til det enkelte program? Hvad med dubletter? Nogle gange skal de med, andre gange skal de ikke!
Jeg har løst det med PHP, men for det første bliver det uoverskueligt, og for det andet må det kunne gøres smartere/hurtigere med de rette SQL-sætninger.
Findes der evt. en bedre måde så brugen med de komma-separerede id-lister kunne lægges på hylden?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Okay... Det første lyder ret fornuftigt... Der skal vel også være et id-felt for at MySQL kan finde ud af det!
Så noget i retning af (id, program_id, redskab_id)?
Lige omkring joins er jeg ikke den store haj!! Så der må jeg lige læse lidt mere på lektien! Har også hørt at joins skulle være frygteligt langsomme, men det er måske en skrøne?
Jah, det er en skrøne. Man skal dog sørge for at joine på felter med indexer, hvis der er mange poster. Alle verdens edb-baserede systemer ville bryde sammen, og du ville ikke engang kunne købe en pakke gær i supermarkedet hvis joins var frygteligt langsomme.
Du kan sætte et id felt på, eller alternativt gøre de 2 felter, som jeg anførte til en fælles primær nøgle.
Njaaa... Problemet er bare at nogle programmer f.eks. skal bruge det samme redskab to gange, og så bliver der to ens felter, hvilket der, så vidt jeg husker, ikke må være i en database! Eller var de databaser jeg lærte om den gang bare for gamle!? :)
En anden situation er at jeg af og til skal hive mange programmer ud efter hinanden, og så må der f.eks. ikke være dubletter i blandt. Er det lettest at kode sig ud af PHP med den, eller findes der også noget smart til det?
Njaaa... Eller nok nærmere rækkefølge, for der skal af og til angives en bestemt rækkefølge. Så slipper vi i hvert fald for id'et!! :)
Det er ikke fordi der stilles ekstremt store krav til den enkelte tabel, men de andre tabeller er jo i præncippet bygget på samme måde, så jeg referer bare til denne for ikke at gøre det alt for kompliceret! ;)
Okay, men hvis vi lige tager en tabel mere med: show_sekvens (en tredje tabel) indeholdt tidligere en komma-separeret liste af show_program-id'er. Hvis jeg nu skal hente alle redskaber ud af en show_sekvens, hvordan gør jeg så det?? Flere database kald efter hinanden, eller kan jeg dobbelt joine?
Hvis du skal have rækkefølge på, skal den defineres
7 | 13 | 1 7 | 9 | 2 7 | 13 | 3
hvor 1, 2, og 3 definerer rækkefølgen. Den tredie tabel med noget kommasepareret skal vel så også laves om? Og ja, du kan joine vilkårligt mange tabeller sammen.
Ja, den tredje tabel skal selvfølgelig også laves om... Efter at have set dit system, må det helt klart siges at skulle laves om!! :)
Jeg skal lige være helt på den sikre side omkring joins, men er ved at læse på lektien, så burde det sidde på lystavlen en gang i nat!! :)
Inden du lige lægger et svar og får dine point, så kan du også lige få den sidste tabel.
show_show (den sidste tabel) indeholdt tidligere en liste af show_program og show_sekvens id'er. Den tabel der skal holde de to sammen, skal vel så bare have en ekstra række i forhold til de andre, som kan fortælle om det er et program eller en sekvens, men hvad når man joiner??
Jeg har skam heller ikke noget imod at du vil "give lidt for det". Jeg samler ikke på point, fordi de intet er værd, og kun egner sig til at skabe larm og ballade.
Det er helt okay!! Vi har alle sammen en holdning, og hverken din eller min er for den sags skyld forkert!! :)
Det skal lige siges at jeg ikke er typen der lægger op til ballade!! ;)
Endnu en gang tak for hjælpen!! :)
Synes godt om
Ny brugerNybegynder
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.