Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Brak wyników w podzapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
tommyexlee
Witam,
Na wstępie powiem, że nie wiem jak nazwać swój problem i nie wiem za bardzo jak wyszukać rozwiązanie w necie.
Rozwiązanie musi być w języku MySql.. nie mam fizycznej możliwości zastosowania PHP i innych w systemie...

Mam tabelę 'wyniki':
  1. id | wartosc | inne_dane
  2. -----------------------
  3. 0 | 500 | 6
  4. 1 | 500 | 7
  5. 2 | 0 | 4
  6. 3 | 0 | 7
  7. 4 | 0 | 3
  8. 5 | 500 | 6
  9. 6 | 500 | 3
  10. ... | ... | ...

Potrzebuję pobrać wartość pierwszą, ostatnią i inne dane z zakresu id>=3 i id<=100.
Problem jest taki, że jeśli wartość początkowa jest równa 0, to powinien pobrać wartość wcześniejszą, większą od 0.
Próbowałem zrobić to tak:
  1. SELECT (SELECT wartosc FROM wyniki WHERE id<=3 AND wartosc>0 LIMIT 1) AS wartosc_pierwsza, (SELECT wartosc FROM wyniki WHERE id<=100 DESC LIMIT 1) AS wartosc_ostatnia, inne_dane
  2. FROM wyniki WHERE id>=3 AND id<=100 ORDER BY id;

wartosc_pierwsza zwraca mi NULL (myślę, że to wynika z WHERE w głównym zapytaniu) i nie wiem jak to obejść...
Bardzo proszę o pomoc.

Pozdrawiam,
Tommyexlee
mmmmmmm
Zmień w podzapytaniu nierówność. Masz teraz MNIEJSZE niż 3.
tommyexlee
no ale musi być mniejsze, bo ma być pobrana wartość wcześniejsza, a nie późniejsza...
mmmmmmm
Podzapytanie nie jest skorelowane, więc warunki w zapytaniu nie mają na nie żadnego wpływu. Ale coś masz skopane... chociaż nie w tym miejscu, bo akurat tę wartość powinien zwracać ok. Wartosc_ostatnia jest skopana... ni z gruszki, ni z pietruszki jest DESC
tommyexlee
to czeski błąd.. tam jest 'ORDER BY id DESC'

co znaczy nie skorelowane?
sazian
a spróbuj tak (jako podzapytanie)
  1. SELECT w.wartosc FROM wynik w WHERE w.id<=3 AND w.wartosc>0 LIMIT 1
  2.  


skorelowane czyli połączone/zależne od zapytania głównego/nadrzędnego - nie da się go uruchomić jako samodzielnego zapytania
Firebright
A jesteś całkowicie pewien, że masz w bazie wiersz spełniający warunki pierwszego zapytania?
Wykonaj zapytanie:
  1. SELECT wartosc FROM wyniki WHERE id<=3 AND wartosc>0 LIMIT 1

i sprawdź czy dostaniesz jakieś rekordy.
Moim zdaniem zapytanie jest ok, z jednym ale - w pierwszym zapytaniu prawdopodobnie też powinieneś dać ORDER BY id DESC. W przeciwnym razie zawsze dostaniesz pierwszą wartość spełniającą warunek, jeżeli będzie wiersz z wartością > 0 i id mniejszym od 3 to dostaniesz pierwszą taką wartość (dla najmniejszego id), nawet jeżeli dla id = 3 wartość będzie > 0.
tommyexlee
mój fatalny błąd wstydnis.gif
Dzięki Firebright.
Dzięki również wszystkim, którzy się zainteresowali tematem.
Pozdrawiam,
Tommyexlee
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.