Avatar billede musicchart.dk Nybegynder
07. juli 2006 - 13:53 Der er 7 kommentarer og
1 løsning

Søge i database

Hvis du jeg har et felt der indeholder følgende:

FELT
1,2,3,4,10,12,14,44,50

Kan man så fx søge på, om der er i feltet findes numrene:
2 og 4 ?

Bemærk kommaadskilningen, så det dur ikke bare at søge ved flg.:

SELECT * FROM Tabel
WHERE Felt (LIKE '%2%' OR LIKE '%4%')

Fordi så vil den jo også returnere, hvis der i feltet findes tallet 12,14,20,40 osv...

Hmm, kom lige til at tænke på noget. Hvis nu man sætter et komma istarten og i slutningen:

FELT
,1,2,3,4,10,12,14,44,50,

Så kunne man søge på:

SELECT * FROM Tabel
WHERE Felt (LIKE '%,2,%' OR LIKE '%,4,%')

Men hvis der findes en derude der har et bedre forslag, er jeg stadig åben for det.
Avatar billede Slettet bruger
07. juli 2006 - 14:05 #1
Smæk det ud i en ny tabel, som skal have to felter: det ene felt (kaldet id) skal være primærnøglen fra din eksisterende tabel og det andet skal have en int-værdi.
Avatar billede musicchart.dk Nybegynder
07. juli 2006 - 14:14 #2
Jo, det har jeg også overvejet. Men nu tænker jeg på performance.

Hvis jeg har 100.000 emner, der måske i snit har 10 til hver.
Så skal jeg ligepludselig søge 1 mio. felter igennem, samt at der skal søges over 2 tabeller.

Så vil jeg mene (jeg kan selvfølgelig tage fejl), at det andet vil give en bedre performance?
Avatar billede Slettet bruger
07. juli 2006 - 14:21 #3
Jeg har ikke afprøvet det, men jeg tror, at du tager fejl. Især hvis du opretter passende indeks på den nye tabel, for så kan databasen optimere søgningen.

Med den nuværende skal den jo lede igennem 100.000 strenge for at se, om der er et match, og den er nødt til at se hele strengen igennem hver gang.

Med den anden skal den måske sammenligne flere værdier, men der er tale om int-værdier, som svarer til ca 1 tegn i en streng hver.
Avatar billede musicchart.dk Nybegynder
07. juli 2006 - 15:11 #4
Du har muligvis ret. Hvis der kun er de 2 muligheder, så må jeg jo vælge en.
Jeg takker for dit input.
Avatar billede arne_v Ekspert
07. juli 2006 - 16:14 #5
hvis du vil undgå komma i start og slut kan du bruge

WHERE ','+Felt+',' (LIKE '%,2,%' OR LIKE '%,4,%')

men sandbox har altså helt ret - du bør omstrukturere din database
Avatar billede musicchart.dk Nybegynder
07. juli 2006 - 16:27 #6
Jamen, det vil jeg gøre så. Jeg er stadig i udviklings/idéstadiet, så databasen er slet ikke lavet endnu. Så der er rig mulighed for at nå at strukturere den efter den bedste løsning.

Hvis i begge vil poste et svar, så lukker jeg spørgsmålet.
Avatar billede arne_v Ekspert
07. juli 2006 - 21:35 #7
sandbox'es ide => sandbox'es point
Avatar billede Slettet bruger
08. juli 2006 - 00:19 #8
Jamen så lægger jeg et svar.
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