Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SELECT MAX....
Forum PHP.pl > Forum > Bazy danych > MySQL
Nazin
  1. SELECT
  2. MAX(a.pole) AS pole1,
  3. MAX(e.pole) AS pole2,
  4. MAX(f.pole) AS pole3,
  5. MAX(g.pole) AS pole4,
  6. MAX(u.pole) AS pole5,
  7. MAX(m.pole) AS pole6,
  8. MAX(d.pole) AS pole7,
  9. MAX(o.pole) AS pole8,
  10. MAX(p.pole) AS pole9,
  11. MAX(t.pole) AS pole10,
  12. MAX(v.pole) AS pole11
  13.  
  14. FROM tabela1
  15. a,
  16. tabela2 e,
  17. tabela3 f,
  18. tabela4 g,
  19. tabela5 u,
  20. tabela6 m,
  21. tabela7 d,
  22. tabela8 o,
  23. tabela9 p,
  24. tabela10 t,
  25. tabela11 v

Mam takie zapytanie, i wszystko ładnie działa, jeśli w każdej tabeli w danym polu są jakieś wartości, jeśli zaś są puste to zwraca same NULLe... Dlaczego?
Proszę o pomoc.
SongoQ
A co bys chcial zeby Ci zwracalo, napis "nie ma rekordow"?
Nazin
LOL blink.gif

Nie rozumiesz mnie czemu np jeśli to

  1. SELECT
  2. MAX(a.pole) AS pole1
  3. FROM tabela1
  4. a


zwróci mi 10
a to:

  1. SELECT
  2. MAX(e.pole) AS pole2
  3. FROM tabela2
  4. e

zwróci mi 0

to dlaczego jak dam:

  1. SELECT
  2. MAX(a.pole) AS pole1,
  3. MAX(e.pole) AS pole2
  4. FROM tabela1
  5. a,
  6. tabela2 e


to są zwracane dwa NULLe zamiast 10 i 0 ?
AxZx
to moze uzyj IF

  1. SELECT IF(max(pole1) != NULL, max(pole1), 0) AS max_pole1
  2. FROM tabela
SongoQ
Cytat
Nie rozumiesz mnie czemu np jeśli to

To ty mnie nie zrozumiales, dzialanie jest jak najbardziej prawidlowe i prawidlowe dostales wyniki. Dziwie sie ze jeszcze bledu nie znalazles, jak zwykle klania sie teoria.

Jesli masz max(id) gdzie nie ma rekordow zwraca NULL
Jesli masz jakies rekordy zwroci Ci makysmalna wartosc

W zapytaniu uzyles wilu tabel, lecz nie masz relacji w nich, czyli baza danych wykorzystuje niejawne polaczenie miedzy nimi, wtedy dostajesz to co napisales.

Przyklad:
tab1
id nazwa
1 ffff
2 ddd
3 dddd

  1. SELECT MAX(id)
  2. FROM tab1

wynik: 3

tab2:
id nazwa
--- brak rekordow
  1. SELECT MAX(id)
  2. FROM tab2

wynik: NULL

teraz robimy to co ty napisales
  1. SELECT MAX(tab1.id), MAX(tab2.id)
  2. FROM tab1,
  3. tab2

wynik: NULL NULL

Zmieniamy tabele tab2:
tab2
id nazwa id_tab1

Jesli zlaczymy to warunkami:
  1. SELECT MAX(tab1.id), MAX(tab2.id)
  2. FROM tab1
  3. LEFT JOIN tab2 ON tab1.id = tab2.id_tab1

wynik:
3 NULL

Teraz dodajmy kolejne rekordy do tabeli2
tab2:
id nazwa id_tab1
1 dsfsdf 1
2 sdfasd NULL
3 sdfsd 2222 - przy ralacji nie przejdzie uzylem zeby Ci to zobrazowac
  1. SELECT MAX(tab1.id), MAX(tab2.id)
  2. FROM tab1
  3. LEFT JOIN tab2 ON tab1.id = tab2.id_tab1

wynik:
3 1

Mam nadzieje ze zrozumiales.
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.