Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zliczanie rekordów dopóki spełniony jest warunek
Forum PHP.pl > Forum > Bazy danych > MySQL
Beq
Witam,

mam taką oto przykładową tabelę:

id | wartosc | data
1 | 1 | 2009-09-10
2 | 1 | 2009-09-09
3 | 1 | 2009-09-09
4 | 1 | 2009-09-08
5 | 0 | 2009-09-07
6 | 1 | 2009-09-06
7 | 1 | 2009-09-05
8 | 1 | 2009-09-05
9 | 1 | 2009-09-04

Chciałbym zliczyć ilość rekordów posortowanych wg daty, w których wartosc=1, ale tylko do momentu wystąpienia pierwszego '0' (kolejnych 'jedynek' ma nie zliczać) - tak aby w powyższym przypadku wyszło 4.
Ges
Może tak:

  1. SELECT * FROM `test` WHERE DATA > (SELECT DATA FROM `test` WHERE wartosc='0' ORDER BY DATA) AND wartosc=1


Pod warunkiem że sortujesz po dacie, bo u Ciebie daty pokrywają się z ID i niewiadomo jaki ORDERING chcesz.

Ale idea powyższa jest do przeniesiania ewentualnie na inny ordering
darko
  1. SELECT count(id) FROM przykladowa_tabela WHERE id < (SELECT id FROM przykladowa_tabela WHERE wartosc=0 LIMIT 1)
Ges
Fakt mój błąd nie użyłem COUNT smile.gif ale to już sam sobie poprawisz.

Ja tylko polecam Ci zwrócić uwagę na sortowaine, bo mogą sie pojawić u Ciebie bugi, jeśli nie konicznie większy ID ma większą datę. Wtedy rozwiązanie podane przez darko nie zadziała poprawnie. Oczywiście zakładam tylko, że chcesz po dacie sortować bo to wydaje mi się najrozsądniejsze. Chyba sortowanie po ID żadko kiedy jest tym czego chcemy :]
Beq
Oto jest dokładnie zapytanie, do którego potrzebowałem pomocy:
  1. SELECT count(id) AS ilosc FROM mecze WHERE gosp_wyn>gosc_wyn AND gosp=$klub AND data>(SELECT DATA FROM mecze WHERE gosp_wyn<=gosc_wyn AND gosp_wyn!='' AND gosc_wyn!='' AND gosp=$klub ORDER BY DATA DESC LIMIT 0,1)


Pojawia się jednak problem w momencie, gdy wewnętrzne zapytanie nie zwraca żadnego rekordu. Wówczas także i zewnętrzne nie działa. Macie może i na to jakieś rozwiązanie?
phpion
Może IFNULL?
marcio
Nie zeby cos a jak zrobisz tak:

  1.  
  2. SELECT count(id) AS ilosc,(SELECT DATA FROM mecze WHERE gosp_wyn<=gosc_wyn AND gosp_wyn!='' AND gosc_wyn!='' AND gosp=$klub ORDER BY DATA DESC LIMIT 0,1) AS datas FROM mecze WHERE gosp_wyn>gosc_wyn AND gosp=$klub AND data>datas
  3.  


Beq
marcio, z twoim zapytaniem coś było nie tak i nie zwracało nic.
Udało mi się jednak z IFNULL i jak na razie wszystko chodzi jak należy.

Wrzucam całe zapytanie, gdyby ktoś kiedyś miał podobny problem. Większych błędów chyba nie ma:
  1. SELECT count(id) AS ilosc FROM mecze WHERE gosp_wyn>gosc_wyn AND gosp=$klub AND data>IFNULL((SELECT DATA FROM mecze WHERE gosp_wyn<=gosc_wyn AND gosp_wyn!='' AND gosc_wyn!='' AND gosp=$klub ORDER BY DATA DESC LIMIT 0,1),'0000-00-00')
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.