Jeg er nybegynder når det kommer til MySQL. Jeg ønsker følgende information trukket ud af en MySQL tabel som indeholder:
navn pris dato
Givet 2 dato'er skal alle de navne som har samme pris på de to dato'er indenfor en bestem margin udtrækkes fra tabelen. Kan dette lade sig gøre i MySQL?
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
SELECT f1.varenr, f1.varetekst, f1.pris as pris1, f2.pris as pris2 FROM dintabel f1 INNER JOIN dintabel f2 ON f1.varenr = f2.varenr WHERE f1.dato = dato1 AND f2.dato = dato2 AND ABS(f1.pris - f2.pris) < 1.5
som burde finde de varer, hvor prisen på de to dage er inden for en "afstand" på <= 1,50 kr.
Ja, men der er også kun tale om én tabel. Det er faktisk den samme tabel, som bliver refereret til to gange. Den får bare tildelt to alias, nemlig f1 og f2.
Det er altid en god idé at sætte et index på felter, som indgår i relationerne mellem tabeller. I mit eksempel ville jeg derfor sætte et index på feltet varenr.
Desuden er det ofte fordelagtigt at sætte et index på nogle af felterne der bliver refereret i en WHERE sætning, især hvis der sker en stor afgrænsning. Hvis vi igen tager mit eksempel, så tror jeg at jeg også ville sætte et index på feltet dato.
Som altid gælder, at jo større tabellen er, des mere får man gavn af et index. Men det er en hel videnskab for sig at optimere dem, for hvis der sker mange ændringer i et felt, eller der tilføjes og slettes meget mere end der læses fra en tabel, kan den tid der skal afsættes til opdateringen af et index godt tale mod oprettelsen af et.
Du bliver nødt til at vurdere situationen fra gang til gang - og måske prøve dig frem.
Bortset fra det, så er relationer på tekstfelter ikke optimale. Det var derfor, at jeg i mit eksempel opererer med et varenummer, selv om du tilsyneladende ikke har et sådant i din tabel, jvf. dit spørgsmål.
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.