Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Pobranie z bazy rekordów jeżeli określony limit w dacie
Forum PHP.pl > Forum > Przedszkole
maraska
Witam,

Mam w bazie tabelę, gdzie m/in pola:
id - data

Jest od zera do kilkuset id w tej samej dacie.

Jak powinno wyglądać zapytanie realizujące:

pobierz id z tabela gdzie id z tą samą daną datą < 10

Czyli chcę pobrać kolejno tylko wszystkie id z tych dni, gdzie w każdym danym dniu była liczba dodanych id < 10.
Nie chcę id z tych dni, gdzie w danym dniu dodane było więcej niż 10 id

Z góry dziękuję za pomoc.
vermis
Tak na szybko:

Zastosuj grupowanie po dacie:
  1. GROUP BY `data`

ilość różnych id możesz usyzkać za pomocą:
  1. COUNT(DISTINCT id)

Sprawdzajać czy ilość jest mniejsza niż 10 otrzymasz to co chcesz.

Id możesz pobrać jako string przez GROUP_CONCAT() Nie wiem w jakiej formie to potrzebujesz, ale może wystarczy. W przeciwnym razie pozostaje użyć powyższe w podzapytniu.
Sephirus
Pobranie dat, dla których było mniej niż 10 idków:

  1. SELECT `data` FROM tabela GROUP BY `data` HAVING COUNT(id) < 10;


Pobranie tych idków:

  1. SELECT id FROM tabela WHERE `data` IN (--zapytanie_wyżej--);


lub można to w jednym wrzucić:

  1. SELECT `data`, GROUP_CONCAT(DISTINCT id SEPARATOR ',') AS idki FROM tabela GROUP BY `data` HAVING COUNT(id) < 10;


tyle że w tym dostaniesz:

data idki
2013-11-20 1,2,3,4,5...
2013-11-19 5,6,7,8,9...

Czyli po przecinkach.
maraska
Dzięki za odpowiedź ale nie chodzi mi o sprawdzenie ilości z określonym warunkiem tylko np. o coś takiego:

pobierz id gdzie data tego id występuje w tabeli <10
Sephirus
Nie do końca rozumiem chyba jednak.

Pisałeś że dana data może posiadać X idków a nie że dany id X dat...

Jeśli potrzebujesz znaleźć id , które ma mniej niz 10 dat to podobnie:

  1. SELECT id FROM tabela GROUP BY id HAVING COUNT(`data`) < 10;
maraska
Przepraszam. Próbuję wyjaśnić jak najlepiej.

W każdym dniu dodaje się ileś idków.

Chcę pobrać tylko idki z takich dni, kiedy nie dodało się ich więcej niż 10
vermis
Cytat(maraska @ 20.11.2013, 11:02:11 ) *
Chcę pobrać tylko idki z takich dni, kiedy nie dodało się ich więcej niż 10


No to tak napisałeś za pierwszym razem. Rozwiązanie już masz. Sprawdziłeś wyniki tych zapytań?
maraska
Chyba by zadziałało tylko pojawił się następny problem.

Datę mam w formacie 2011-07-15 08:44:40 a oczywiście dodawane są w różnych godzinach tego samego dnia sad.gif

Da się jakoś w zapytaniu sql zapytać o datę w formacie (Y-m-d) czyli z pominięciem czasu?

Wykombinowałem coś takiego i testuję

  1. SELECT wizyt FROM wizyt GROUP BY data_dodania HAVING COUNT(DATE_FORMAT(`data_dodania`,'%Y-%m-%d')) < 10
Sephirus
  1. ... COUNT(DISTINCT DATE(`data`)) ...
maraska
Jednak nie działa mi ten warunek. Wyświetla idki z dni gdzie było dodane więcej niż 10.

Proszę o pomoc

  1. HAVING COUNT( DISTINCT DATE_FORMAT( `data_dodania` , '%Y-%m-%d' ) ) <10
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.