Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z IFem i zmiennymi oraz 2 pytania
Forum PHP.pl > Forum > Bazy danych > MySQL
spenalzo
Mam takie zapytanko (fragment):
[sql:1:9c6dbbb2b0]SELECT ...
IF(LOCATE('jakis',LOWER(post_text))>1, @licz:=@licz+1,0),
IF(LOCATE('inny',LOWER(post_text))>1, @licz:=@licz+1,0),
@stosunek:=(@licz/LENGTH(post_text)) ...[/sql:1:9c6dbbb2b0]
i to nie działa, ponieważ czasami którykolwiek z tych IFów zwróca NULL :? co mnie dziwi troche..
Pokombinowałem troche i wymyśliłem sobie tak:
[sql:1:9c6dbbb2b0]SELECT ...
IF(LOCATE('jakis',LOWER(post_text))>1, IF(ISNULL(@licz)=1,@licz:=1,@licz:=@licz+1),0),
IF(LOCATE('inny',LOWER(post_text))>1, IF(ISNULL(@licz)=1,@licz:=1,@licz:=@licz+1),0),
@stosunek:=(IF(ISNULL(@licz),0,@licz)/LENGTH(post_text)) ...[/sql:1:9c6dbbb2b0]

Czy to jest poprawne??

Dodatkowe pytania - czy sortowanie po zmiennej jest poprawne?
oraz czy jest coś co pozwala sortować naturalnie - bo teraz wiersze sie ukłądają mniej wiecej tak (przy ORDER BY @stosunek):
3.xx
2.xx
10.xx
0.xx
itd - a bym chciał żeby było naturalnie posortowane... :/
adwol
Cytat
i to nie działa, ponieważ czasami którykolwiek z tych IFów zwróca NULL :? co mnie dziwi troche..

Jest to całkowicie poprawne zachowanie, ponieważ w logice SQLowej:
Kod
NULL + 1 = NULL

Jeśli więc @licz jest niezainicjowana (ma wartość NULL) dodawanie do niej liczby nie zmienia jej wartości.
Cytat
Pokombinowałem troche i wymyśliłem sobie tak:
[sql:1:a2a019da85]SELECT ...
IF(LOCATE('jakis',LOWER(post_text))>1, IF(ISNULL(@licz)=1,@licz:=1,@licz:=@licz+1),0),
IF(LOCATE('inny',LOWER(post_text))>1, IF(ISNULL(@licz)=1,@licz:=1,@licz:=@licz+1),0),  
@stosunek:=(IF(ISNULL(@licz),0,@licz)/LENGTH(post_text)) ...[/sql:1:a2a019da85]
Czy to jest poprawne??

Jeśli pierwszy kod (pomijając te NULLe) jest poprawny, to ten też (pomijając, że jest chyba ciut nadmiarowy).
Cytat
Dodatkowe pytania - czy sortowanie po zmiennej jest poprawne?

Jeśli występuje sama to chyba nie bardzo, bo wartość zmiennej będzie stała w całym zapytaniu i sortowania tak naprawdę nie będzie.
Cytat
a bym chciał żeby było naturalnie posortowane

Tzn. jak? Liczbowo czy leksykograficznie?
uboottd
Mozesz sobie skrocic i uczytelnic zapis konstrukca IFNULL(wyr1, wyr2) - dziala to tak, ze jesli wyr1 <> NULL to zwraca wyr1 w przeciwnym razie wyr2.
spenalzo
Ok, dzięki za odpowiedzi!

Cytat
Cytat
a bym chciał żeby było naturalnie posortowane

Tzn. jak? Liczbowo czy leksykograficznie?

Mam liczby z sqla posortowane dokładnie tak:
8.030303030303
6.7543859649123
5.0865051903114
3.030303030303
2.1052631578947
11.379310344828
10.085689802913
1.7241379310345
0.93896713615023
itd, a ja bym chciał od największej do najmniejszej czyli: 11,10,8,6 itd..

Cytat
Mozesz sobie skrocic i uczytelnic zapis konstrukca IFNULL(wyr1, wyr2)

Done smile.gif

Przy okazji: czy funkcja LOCATE rozróżnia wielkość liter oraz czy jest limit długości zapytania SQL?
adwol
Cytat
Mam liczby z sqla posortowane dokładnie tak:  
8.030303030303
6.7543859649123
5.0865051903114
3.030303030303
2.1052631578947
11.379310344828
10.085689802913
1.7241379310345
0.93896713615023
itd, a ja bym chciał od największej do najmniejszej czyli: 11,10,8,6 itd..

[sql:1:5a472ef46b]select * from tabela order by pole+0[/sql:1:5a472ef46b]
Było to niedawno na forum. Wystarczy poszukać . smile.gif
spenalzo
Cytat
[sql:1:c0364eab9a]select * from tabela order by pole+0[/sql:1:c0364eab9a]
Było to niedawno na forum. Wystarczy poszukać . smile.gif

sad.gif
Nie działa ...
[sql:1:c0364eab9a] ORDER BY @stosunek + 0 DESC[/sql:1:c0364eab9a]
Właśnie w tym problem, że to musi być po zmiennej... Cóż, sortowanie zrobie w php.
adwol
Przecież pisałem Ci, że zmienne nie będą tu działać.
Cytat
Note: in a SELECT statement, each expression is evaluated only when it's sent to the client. This means that in the HAVING, GROUP BY, or ORDER BY clause, you can't refer to an expression that involves variables that are set in the SELECT part
spenalzo
Cytat
Przecież pisałem Ci, że zmienne nie będą tu działać.

Zrobie to w php, ale dopowiem tylko, że jednak poprawnie sortuje po zmiennej za wyjątkiem tego co opisałem wyżej. Dziwne smile.gif
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.