Avatar billede ruma1974 Nybegynder
25. september 2006 - 18:20 Der er 9 kommentarer

MySQL udtræk problem

Hej,

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?

Mvh,

Rune
Avatar billede zynzz Praktikant
25. september 2006 - 19:17 #1
mysql_query("SELECT navn, pris, dato FROM DINTABEL where pris='$pris'");

SELECT navn, pris, dato FROM DINTABEL where pris='DINPRIS'
Avatar billede zynzz Praktikant
25. september 2006 - 19:18 #2
Er det sådan noget du mener ?
Avatar billede kjulius Novice
25. september 2006 - 22:44 #3
Måske sådan:

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.
Avatar billede ruma1974 Nybegynder
27. september 2006 - 17:24 #4
Ok, jeg har dog kun en table. Jeg vil prøve at modificere til mit eksemple.
Avatar billede kjulius Novice
27. september 2006 - 22:51 #5
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.
Avatar billede ruma1974 Nybegynder
02. oktober 2006 - 12:30 #6
Super cool. Dette fortjener bestemt points!

Det tog mig lidt tid at forstå men nu virker det på mine data (Det hjalp med din sidste kommentar).

Hvis du ligger et svar så får du point
Avatar billede ruma1974 Nybegynder
02. oktober 2006 - 12:32 #7
Det tager dog lidt tid at køre på et stort datasæt. Jeg har lavt index på mine tekst entries. Er der andet man kan gøre for at optimere?
Avatar billede kjulius Novice
02. oktober 2006 - 18:04 #8
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.
Avatar billede ruma1974 Nybegynder
04. oktober 2006 - 13:01 #9
Mange tak for de gode kommentare ;-)
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