Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z IFem i zmiennymi oraz 2 pytania
spenalzo
post 12.12.2003, 16:17:58
Post #1





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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... :/
Go to the top of the page
+Quote Post
adwol
post 12.12.2003, 23:42:38
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
uboottd
post 12.12.2003, 23:52:43
Post #3





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

Ostrzeżenie: (0%)
-----


Mozesz sobie skrocic i uczytelnic zapis konstrukca IFNULL(wyr1, wyr2) - dziala to tak, ze jesli wyr1 <> NULL to zwraca wyr1 w przeciwnym razie wyr2.
Go to the top of the page
+Quote Post
spenalzo
post 13.12.2003, 00:36:28
Post #4





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
adwol
post 13.12.2003, 17:38:28
Post #5





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
spenalzo
post 13.12.2003, 17:44:57
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
adwol
post 13.12.2003, 18:09:41
Post #7





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
spenalzo
post 13.12.2003, 18:44:47
Post #8





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 12:30