Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak ustawić zmienną?
Forum PHP.pl > Forum > Bazy danych > MySQL
spenalzo
Mam taki problem - w jaki sposób ustawić zmienną @costam, żeby przy wywołaniu właściwego zapytania miała wartość 1.000... lub 0.000... (powinna być typu float jeżeli ma to znaczenie), a nie NULL questionmark.gif
Jeżeli dam tak:
[sql:1:30991c5fec]SELECT @zm:=1 .... [/sql:1:30991c5fec]
To coś nie działa :|
uboottd
A bez metafor ? Co znaczy ze nei dziala ?
Kod
mysql> select @a;

+------+

| @a   |

+------+

| NULL |

+------+

1 row in set (0.07 sec)



mysql> select @a:=1;

+-------+

| @a:=1 |

+-------+

|     1 |

+-------+

1 row in set (0.02 sec)



mysql> select @a;  

+------+

| @a   |

+------+

| 1    |

+------+

1 row in set (0.00 sec)
spenalzo
Mam takie zapytanie:
  1. ]SELECT ff_topics.topic_id, ff_posts.post_time, IF(LOCATE('matrix',LOWER(ff_posts_text.post_text))>1, IFNULL(@licz:=@licz+1,@licz:=1),0), @stosunek:=1, @wyraz1:=ABS(LENGTH(ff_posts_text.post_text) - LENGTH(REPLACE(ff_posts_text.post_text,SUBSTRING('matrix',2),'matrix'))), IF(@wyraz1>0,@stosunek:=@stosunek+(@wyraz1*0.1),0),IF(LOCATE('matrix',LOWER(ff_posts_text.post_subject))>0, @stosunek:=@stosunek+0.05,0), IF(LOCATE('matrix',LOWER(ff_topics.topic_title))>0, @stosunek:=@stosunek+0.1,0), @stosunek:=@stosunek*100, @stosunek AS stosunek, ff_topics.topic_title, ff_posts_text.post_id AS id , SUBSTRING(ff_posts_text.post_text,1,200) AS post_content FROM ff_posts_text LEFT JOIN ff_posts ON ( ff_posts.post_id = ff_posts_text.post_id) LEFT JOIN ff_topics ON ( ff_posts.topic_id = ff_topics.topic_id) WHERE (ff_posts_text.post_text LIKE '%matrix%' OR ff_posts_text.post_subject LIKE '%matrix%' OR ff_topics.topic_title LIKE '%matrix%') ORDER BY ff_posts.post_time DESC

i dostaje w wyniku zmienną @stosunek z wartością NULL.

Natomiast jeżeli zamiast @stosunek:=1 dam @stosunek:=(IFNULL(@licz,0)/CHAR_LENGTH(ff_posts_text.post_text)) to jest OK...
Prawde mówiąc to mnie to troche denerwuje, bo nie moge tego przeskoczyć sad.gif

Update: sprawdziłęm i samo przypisanie @stosunek:=1 zwraca 1, ale ogólnie coś jest nie tak, ale jeżeli wartość zmiennej jest nadawana z drugiego przykładu to działa dobrze.
Nie pomaga także przypisanie @stosunek:=1.0000000 itd
uboottd
wersja mysqla taka jak w stopce ?
spenalzo
Cytat
wersja mysqla taka jak w stopce ?

Tak.
uboottd
A @wyraz1 ustawia sie na jakas wartosc nie nullowa we wszystkich wierszach ?

zreszta mozesz zacytowac przykladowy wynik (najlepiej z shela mysqlowwego)
spenalzo
Właśnie tak myślałem że w tym problem, ale jak dam [sql:1:82fe9b4fc2]@wyraz1:=0, (lub @wyraz1:=1) @wyraz1:=ABS...[/sql:1:82fe9b4fc2] to i tak nic.

Ale co ciekawe, jeżeli @wyraz1 jest większe od 0 to IF(@wyraz1>0,@stosunek:=@stosunek+(@wyraz1*0.1),0) zwraca NULL. Rozumiem, że 1+NULL=NULL ale przecież @wyraz1 ma przypisaną wcześniej wartość rolleyes.gif

-> Wynik zapytania
uboottd
Wiesz co, jest to cos bardzo dziwnego. Jak na razie nie udalo mi sie u mnie powtorzyc takiego zachowania. Moglbys podeslac wynik ale wlasnie z shela mysqlowego a nie zadnego toola wwwowego ? (traca sie niektore informacje)

A jeszcze lepiej create table tych trzech i jakis minimalny zestaw insertow zeby mozna dokladnie powtorzyc to zapytanie ?
spenalzo
Kod
topic_id    post_time    IF(LOCATE('matrix',LOWER(ff_posts_text.post_text))>1, IFNULL(@licz:=@licz+1,@licz:=1),0)    @stosunek:=1    @wyraz1:=ABS(LENGTH(ff_posts_text.post_text) - LENGTH(REPLACE(ff_posts_text.post_text,SUBSTRING('matrix',2),'matrix')))    IF(@wyraz1>0,@stosunek:=@stosunek+(@wyraz1*0.1),0)    IF(LOCATE('matrix',LOWER(ff_posts_text.post_subject))>0, @stosunek:=@stosunek+0.05,0)    IF(LOCATE('matrix',LOWER(ff_topics.topic_title))>0, @stosunek:=@stosunek+0.1,0)    @stosunek:=@stosunek*100    stosunek    topic_title    id

127    1069423910    1    1    1    NULL    0    NULL    NULL    NULL    MatrixII, Equlibrium, Returner czy Hero?    858

36    1068627159    0    1    1    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    816

11    1068492942    1    1    1    NULL    0    NULL    NULL    NULL    Matrix II    805

173    1068242336    0    1    0    0    0    NULL    NULL    NULL    Matrix 3    796

173    1068226543    1    1    2    NULL    0    NULL    NULL    NULL    Matrix 3    794

173    1068220579    1    1    1    NULL    0    NULL    NULL    NULL    Matrix 3    793

173    1068155668    1    1    1    NULL    0    NULL    NULL    NULL    Matrix 3    791

173    1068147863    1    1    1    NULL    0    NULL    NULL    NULL    Matrix 3    789

173    1068127317    1    1    6    NULL    0    NULL    NULL    NULL    Matrix 3    788

173    1068122096    0    1    0    0    0    NULL    NULL    NULL    Matrix 3    781

173    1068071315    1    1    8    NULL    NULL    NULL    NULL    NULL    Matrix 3    779

36    1067795580    1    1    1    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    767

36    1067729743    1    1    8    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    762

4    1066245553    1    1    1    NULL    0    0    NULL    NULL    Equlibrium    692

130    1065888449    1    1    1    NULL    0    0    NULL    NULL    Terminator 3    677

72    1064258101    1    1    1    NULL    0    0    NULL    NULL    Hugo Weawing    561

127    1064213705    0    1    0    0    0    NULL    NULL    NULL    MatrixII, Equlibrium, Returner czy Hero?    532

130    1064158143    1    1    1    NULL    0    0    NULL    NULL    Terminator 3    525

127    1064093696    0    1    0    0    0    NULL    NULL    NULL    MatrixII, Equlibrium, Returner czy Hero?    523

127    1064002518    1    1    2    NULL    0    NULL    NULL    NULL    MatrixII, Equlibrium, Returner czy Hero?    519

130    1064000709    1    1    2    NULL    0    0    NULL    NULL    Terminator 3    518

36    1063920649    1    1    1    NULL    NULL    0    NULL    NULL    Beznadzieja miesi±ca    512

4    1063920466    1    1    1    NULL    0    0    NULL    NULL    Equlibrium    511

119    1063879254    1    1    1    NULL    0    0    NULL    NULL    Hero    493

127    1063879124    1    1    2    NULL    NULL    NULL    NULL    NULL    MatrixII, Equlibrium, Returner czy Hero?    492

19    1063131463    1    1    1    NULL    0    0    NULL    NULL    Lista Gniotów    441

12    1061055594    1    1    1    NULL    0    0    NULL    NULL    Lista hitów    333

65    1058042623    1    1    0    0    0    0    NULL    NULL    Do fanów "Metallici"    222

36    1057240414    1    1    1    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    179

11    1055785252    0    1    0    0    0    NULL    NULL    NULL    Matrix II    148

11    1055435364    0    1    0    0    0    NULL    NULL    NULL    Matrix II    144

36    1055156191    1    1    1    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    132

11    1055155029    0    1    0    0    0    NULL    NULL    NULL    Matrix II    130

36    1055021653    1    1    1    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    112

36    1054986689    1    1    1    NULL    0    0    NULL    NULL    Beznadzieja miesi±ca    110

11    1054557887    1    1    2    NULL    0    NULL    NULL    NULL    Matrix II    99

11    1053850767    1    1    1    NULL    0    NULL    NULL    NULL    Matrix II    83

11    1053776745    0    1    0    0    0    NULL    NULL    NULL    Matrix II    80

11    1053724564    1    1    1    NULL    0    NULL    NULL    NULL    Matrix II    78

11    1053545096    1    1    4    NULL    0    NULL    NULL    NULL    Matrix II    70

11    1053467458    1    1    7    NULL    0    NULL    NULL    NULL    Matrix II    59

11    1053423018    1    1    5    NULL    0    NULL    NULL    NULL    Matrix II    37

4    1053371247    1    1    1    NULL    0    0    NULL    NULL    Equlibrium    28

11    1053371075    0    1    0    0    NULL    NULL    NULL    NULL    Matrix II    27

11    1053283391    1    1    1    NULL    0    NULL    NULL    NULL    Matrix II    21

12    1053283210    1    1    1    NULL    0    0    NULL    NULL    Lista hitów    20

11    1053283036    1    1    1    NULL    NULL    NULL    NULL    NULL    Matrix II    19

11    1053248637    1    1    1    NULL    NULL    NULL    NULL    NULL    Matrix II    15

4    1053180357    1    1    2    NULL    0    0    NULL    NULL    Equlibrium    5

To dokładnie zwrócił mysql (usunąłem kolumne z tekstem)...
spenalzo
Musze przyznać że to mi podsunęło pewien pomysł na rozwiazanie mojego problemu, ale nie mam teraz możliwości sprawdzenia tego.
uboottd
To daj znac, my z adwolem siedziemy i sprobujemy ustalic czy manual klamie czy chlopcy od mysqla zasadzili buga, a ta wiadomosc sie nam przyda przy tym.
spenalzo
Coś mi tu śmierdzi.....
Dałem sobie na samym początku serii zapytań do bazy coś takiego:
[sql:1:c20ec02d86]SELECT @stosunek:=0.0, @wyraz1:=0, @wyraz2:=0 ... @wyrazx:=0 [/sql:1:c20ec02d86]
a w trzecim mam @wyraz1:=1, @stosunek:=1.... i po wykonaniu wszystkich obliczęń w głównym zapytaniu @stosunek wynosi ok. 2.0101010101051e+079 ...

Żeby nie było nieporozumień (drobne zmiany w II zapytaniu):
[sql:1:c20ec02d86]SELECT @stosunek:=0.0, @wyraz1:=0[/sql:1:c20ec02d86]
(jak jest @stosunek:=0 to po wykonaniu wszystkich 2 zapytań i tak ma 0, j ak dam @stosunek:=0.0 lub @stosunek:="0" [zgodnie z manualem] to wyuchdzi tak jak niżej)
+
[sql:1:c20ec02d86]SELECT ff_topics.topic_id, ff_posts.post_time, IF(LOCATE('matrix',LOWER(ff_posts_text.post_text))>1, IFNULL(@licz:=@licz+1,@licz:=1),0), @stosunek:=0.0, @wyraz1:=0, @wyraz1:=ABS(LENGTH(ff_posts_text.post_text) - LENGTH(REPLACE(ff_posts_text.post_text,SUBSTRING('matrix',2),'matrix'))), IF(@wyraz1>0,@stosunek:=@stosunek+(@wyraz1*0.1),0) , @stosunek:=@stosunek*100, @stosunek AS stosunek, ff_topics.topic_title, ff_posts_text.post_id AS id , SUBSTRING(ff_posts_text.post_text,1,200) AS post_content FROM ff_posts_text LEFT JOIN ff_posts ON ( ff_posts.post_id = ff_posts_text.post_id) LEFT JOIN ff_topics ON ( ff_posts.topic_id = ff_topics.topic_id) WHERE ff_posts_text.post_text LIKE '%matrix%' ORDER BY ff_posts.post_time DESC[/sql:1:c20ec02d86]
i wszystko jest OK do momentu dojścia do tego fragmentu:
[sql:1:c20ec02d86]IF(@wyraz1>0,@stosunek:=@stosunek+(@wyraz1*0.1),0)[/sql:1:c20ec02d86]
i wtedy @stosunek przybiera wartość 2.01010101010507e+077 (rozni sie ostatnimi 2 cyframi, np. 077, 074, 075)
Teraz to ja już nie wiem o co chodzi :-k
spenalzo
Jedno już wiadomo:
to nie jest bug - musze inaczej napisać to zapytanie... fakt, że lekko nie mam pomysłu jak, ale popracuje nad tym.
spenalzo
Bleh...
Oto do czego doszedłem - wartości zmiennych są do siebie jakby dodawanie
SQL Dump
spójrzcie na wartość tam gdzie jest "@wyrazBz*0.1)+@stosunek" .... A niby wszystko jest prawidłowo zadeklarowane.

Przed tym zapytaniem wykonuje jeszcze jedno
[sql:1:8170b415fd]SET @stosunek:=0, @wyrazBz:=1 ...[/sql:1:8170b415fd]
bo bez tego wychodzą same NULLe :|


Jakieś sugestie? :cry:
spenalzo
Żadnych pomysłów?
Najgorsze jest to, że raz wcześniej mi się udało zrobić, że było OK, ale zgubiłem gdzieś to :cry: :cry:
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.