Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi (1 - 9)
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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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;


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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 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`)) ...


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 22:59