Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]Pobranie z bazy rekordów jeżeli określony limit w dacie
maraska
post
Post #1





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
vermis
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Sephirus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Sephirus 20.11.2013, 10:52:43
Go to the top of the page
+Quote Post
maraska
post
Post #4





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Sephirus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
maraska
post
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
vermis
post
Post #7





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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ń?
Go to the top of the page
+Quote Post
maraska
post
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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


Ten post edytował maraska 20.11.2013, 11:41:21
Go to the top of the page
+Quote Post
Sephirus
post
Post #9





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. ... COUNT(DISTINCT DATE(`data`)) ...
Go to the top of the page
+Quote Post
maraska
post
Post #10





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:22