Problem z IFem i zmiennymi oraz 2 pytania |
Problem z IFem i zmiennymi oraz 2 pytania |
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... :/ |
|
|
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? |
|
|
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.
|
|
|
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 Przy okazji: czy funkcja LOCATE rozróżnia wielkość liter oraz czy jest limit długości zapytania SQL? |
|
|
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ć . |
|
|
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ć . 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. |
|
|
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
|
|
|
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 |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 12:30 |