|
| [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
| |
|
|