/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MySQL]User-variabler - initialiserede ell~
Fra : Stig Nørgaard Jepsen


Dato : 07-03-02 20:04

Hvis man har denne tabel:
id data
3 2
2 1
1 3

Denne forespørgsel:
SELECT @var, data, @var:=data+(IFNULL(@var,0)) FROM table

Hvad ville du forvente første gange forespørgslen bliver udført?
Jeg ville forvente dette:
NULL, 2, 2
2, 1, 3
3, 3, 6

Men dette er istedet resultat for første udførelse:
NULL, 2, 2
NULL, 1, 1
NULL, 3, 3
og den næste:
3, 2, 5
5, 1, 6
6, 3, 9

Hvorfor det??

Er der nogle andre der gidder at lave forsøget?

Mvh Stig





 
 
Jakob Møbjerg Nielse~ (08-03-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 08-03-02 09:40

> Denne forespørgsel:
> SELECT @var, data, @var:=data+(IFNULL(@var,0)) FROM table

Hvad sker der hvis du initialiserer den først? (set @var=NULL;")

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Stig Nørgaard Jepsen (08-03-2002)
Kommentar
Fra : Stig Nørgaard Jepsen


Dato : 08-03-02 11:14

> > SELECT @var, data, @var:=data+(IFNULL(@var,0)) FROM table
>
> Hvad sker der hvis du initialiserer den først? (set @var=NULL;")

Har faktisk fundet ud af at det hjælper på problemet...
Men det sjove er bare at der står i manualen at man ikke behøver at
initialisere:
http://www.mysql.com/documentation/mysql/bychapter/manual_toc.html#Variables


Okay.. jeg har udviddet spørgsmålet en lille smule:
tabel:testdata
id data
1 3
2 1
3 2
4 2

SET @var:=NULL;
SELECT id, data , @var, @var2:=@var, @var:=data FROM testdata HAVING
@var2!=data ORDER BY data;

Hvad ville du forvente her?
Jeg ville forvente
2, 1, NULL, NULL, 1
3, 2, 1, 1, 2
1, 3, 2, 2, 3

Men får:
ingen resultat.

/Stig



Jakob Møbjerg Nielse~ (08-03-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 08-03-02 12:07

> SET @var:=NULL;
> SELECT id, data , @var, @var2:=@var, @var:=data FROM testdata HAVING
> @var2!=data ORDER BY data;

Prøv med:

SELECT id, data , @var, @var2:=@var, @var:=data FROM testdata HAVING
@var2:=@var!=data ORDER BY data;

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Stig Nørgaard Jepsen (08-03-2002)
Kommentar
Fra : Stig Nørgaard Jepsen


Dato : 08-03-02 13:39

> > SET @var:=NULL;
> > SELECT id, data , @var, @var2:=@var, @var:=data FROM testdata HAVING
> > @var2!=data ORDER BY data;
>
> Prøv med:
>
> SELECT id, data , @var, @var2:=@var, @var:=data FROM testdata HAVING
> @var2:=@var!=data ORDER BY data;

Det gi'r stadigvæk 0 rækker.
Hvad er ideen bag dit forslag?

Mvh Stig



Jakob Møbjerg Nielse~ (08-03-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 08-03-02 14:53

> Det gi'r stadigvæk 0 rækker.
> Hvad er ideen bag dit forslag?

Nå ja... glemte lige hvordan det er at arbejde med NULL:

SELECT id, data, @var, @var2:=@var, @var:=data FROM tilmelding where
if(isnull(@var2), 1, @var2!=postnummer);

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jakob Møbjerg Nielse~ (08-03-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 08-03-02 14:55

PS: Du behøver ikke at sende CC's til mig.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Stig Nørgaard Jepsen (08-03-2002)
Kommentar
Fra : Stig Nørgaard Jepsen


Dato : 08-03-02 15:11

> PS: Du behøver ikke at sende CC's til mig.

Sorry. Det vil jeg skrive mig bag øret.

/Stig



Jakob Møbjerg Nielse~ (08-03-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 08-03-02 15:19

> SELECT id, data, @var, @var2:=@var, @var:=data FROM tilmelding where
> if(isnull(@var2), 1, @var2!=postnummer);

Den skal lige rettes til

SELECT id, data, @var, @var2:=@var, @var:=data FROM testdata where
if(isnull(@var2), 1, @var2!=data);

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Stig Nørgaard Jepsen (08-03-2002)
Kommentar
Fra : Stig Nørgaard Jepsen


Dato : 08-03-02 15:23

> > Det gi'r stadigvæk 0 rækker.
> > Hvad er ideen bag dit forslag?
>
> Nå ja... glemte lige hvordan det er at arbejde med NULL:
>
> SELECT id, data, @var, @var2:=@var, @var:=data FROM tilmelding where
> if(isnull(@var2), 1, @var2!=postnummer);

Hmmm...
Har du prøvet dette eksempel af?

Skulle jeg så skrive...
SELECT id, data, @var, @var2:=@var, @var:=data FROM testdata where
if(isnull(@var2), 1, @var2!=data);
.... for at oversætte det til mit eksmepel?

Jeg kan ikke helt få det til at virke som det burde (efter min mening).
Nu returnerer den alle rækkerne, og hvis jeg ændrer exp2 i if-sætningen til
0, får jeg ingen rækker. Hvilket betyder at isnull-funktionen ser @var2 som
NULL hele vejen igennem.

Får du samme resultat?

Mvh Stig



Jakob Møbjerg Nielse~ (08-03-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 08-03-02 15:56

> Jeg kan ikke helt få det til at virke som det burde (efter min
> mening). Nu returnerer den alle rækkerne, og hvis jeg ændrer exp2
> i if-sætningen til 0, får jeg ingen rækker. Hvilket betyder at
> isnull-funktionen ser @var2 som NULL hele vejen igennem.
>
> Får du samme resultat?

Damn Det havde jeg lige overset i farten. Prøv at se om du kan få
noget ud af at læse de 3 første emner her:

http://www.mysql.com/doc/manual.php?search_query=null&depth=0

Jeg er løbet tør for ideer.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Stig Nørgaard Jepsen (08-03-2002)
Kommentar
Fra : Stig Nørgaard Jepsen


Dato : 08-03-02 16:22


"Jakob Møbjerg Nielsen" <vitz@cs.auc.dk> wrote in message
news:a6ajbv$et5$1@sunsite.dk...
> > Jeg kan ikke helt få det til at virke som det burde (efter min
> > mening). Nu returnerer den alle rækkerne, og hvis jeg ændrer exp2
> > i if-sætningen til 0, får jeg ingen rækker. Hvilket betyder at
> > isnull-funktionen ser @var2 som NULL hele vejen igennem.
> >
> > Får du samme resultat?
>
> Damn Det havde jeg lige overset i farten. Prøv at se om du kan få
> noget ud af at læse de 3 første emner her:
>
> http://www.mysql.com/doc/manual.php?search_query=null&depth=0
>
> Jeg er løbet tør for ideer.

Generelt tror jeg ikke at det er et problem med NULL-værdier. Det må være
noget at gøre med user-variablerne.... For @var2 burde jo ikke være NULL
hver gang, men det er den jo ifølge ISNULL. Og jeg tror ikke at der er noget
ivejen med ISNULL.

Øv øv... tænk at det bare ikke kan lade sig gøre. MySQL er indimellem lidt
begrænset.

Mvh Stig



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste