![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
Mam takie oto pytanie - potrzebuje wyłowić z tabeli rekordy posiadające tę samą date i je policzyć np. w obrębie ostatnich 30 dni.
Zatem formuła powinna być mniej więcej taka: [php:1:9f27dd56d0] <?php for($i=30;$i>1;$i--) { $zapytanie = "select * from statystyki WHERE stat_data>'".$data."'-'".$i."'"; $wynik = mysql_query($zapytanie); if (!$wynik) { echo "AAAAAAAAAAA!!!!!!"; } $ile_znalezionych=mysql_num_rows($wynik); } ?>[/php:1:9f27dd56d0] Dlaczego zapytanie typu: [sql:1:9f27dd56d0] select * from statystyki WHERE stat_data>JakasData-30 [/sql:1:9f27dd56d0] nie działa poprawnie. Dzięki za odpowiedź. -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Podpowiem, że najlepiej liczyć tak:
[php:1:ec8b8d1e7e]<?php $q=mysql_query("SELECT count(ID) FROM tabela WHERE warunki"); $ille=mysql_result($q,0); ?>[/php:1:ec8b8d1e7e] -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
i naturalnie data typu:
[php:1:821025f56f]<?php $data=date("Y-m-d"); ?>[/php:1:821025f56f] ![]() -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
To co podałeś to tylko inny sposób zapytania - a ten jest celowy bo i tak będą rekordy później wyświetlane.
A chodzi tylko o to jak kostruować pętle tak aby daty były data-1, data-2 i zliczać od daty bazowej liczbę wejść przez np. kolene 30 dni. -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Lepiej jakbyś zapisywał datę w formacie uniksowym, łatwiej formatować, sortować itd.
-------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
Tylko mająć w bazie 2000 rekordów to lekko za późno - musze sie z tym uporać tak jak jest 8O . Człowiek głupi nie pomyślał wcześniej.
-------------------- who control the past
command the future who command the future conquer the past |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
ale przecież jednorazowe przeliczenie 2000 rekordów to nie jest taki duży problem - [manual:ba4e826eda]mktime [/manual:ba4e826eda]sobie z tym dobrzre poradzi
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
Tyle że przeliczanie to zawracanie kijem wisły bo tu tak naprawde chodzi o to czy sql potrafi wygenerować datę o jeden dzień późniejszą/wcześniejszą od znanej. Np. 2003-09-11 (2003-09-10 lub 2003-09-12) na zasadzie data+1 (coś na zasadzie przeciążonych operatorw). I tu w php probelemu nie ma bo zawsze można napisać taki operator(funkcje) która wygeneruje te daty biorąc pod uwagę rok przestępny, ilość dni w miesciącu itd.
Mnie tylko zastanwia dlaczego sql nie potrafi - albo potrafi a ja tego nie umiem zrobić - tak prostej rzeczy jak where stat_data=data-1. Bo gdyby to działało to po zbiciu w pętli problem znika sam. -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Ale zaraz, nie tak szybko.
Najpierw robisz pewne rzeczy po swojemu, rezygnując z możłiwości bazy (czyli zamiast opierać sie na polu przeznaczony konkretnie na date (timestamp) lub - już trochę mniej na to, czyli Int) Ty wolisz zapisywać datę jak string. Twoje prawo, ale w tensposób na pewno sobie nie pomagasz. Co wiecej - w php tez nie możesz napisać po prostu '3-10-2003' +1 o oczekiwać kolejnego dnia. Czemu wiec wymagać tego od MySQL? -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
Jest wręcz dowrotnie.
1. POle o którym mowa stat_data jest typu date wobec czego silnie związane z polem daty MySql'a - tylko data pokazana przeze mnie jako RRRR-MM-DD jest chyba oczywista - tak musi wyglądać ta data i taka jest do tabeli dopisywana. 2. Ja oczekuje tylko i wyłącznie tego że MySql ma swój przeciążony operator inc.dec dat - nic więcej - innymi słowy chiałbym aby reagował na data-30, data-1 w oczywisty sposób. 3. Jeżeli taki sposób by nie był możliwy to można operować na strongach ale jest to czasochłonne i mozliwe że bezsensowne. -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat 3. Jeżeli taki sposób by nie był możliwy to można operować na strongach ale jest to czasochłonne i mozliwe że bezsensowne.
A co tu pracochłonnego i bezsensownego?! Przecież dzięki temu możesz łatwiej sortować, odejmować i formatować datę -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
uff.
Ale czasem trdno zrozumiec, o co komuś chodzi. Ale chyba w końcu mi sie udalo. Wydaje mi się, ze może ci pomóc jedna z funckji MySQL z serii date, czyli DAYOFYEAR, UNIX_TIMESTAMP() i wykożystanie ich w zapytaniu. Możesz też pobrać tylko msc zdarzenia (MONTH() ) i pobrać wszystkie dane z danego msca.. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
Bo w końcu do czego mamy stworzonego sql'a ?!
Chciałbym i mam: rekordy wybrane za pmocą zapytania np. z pomiędzy: [sql:1:6a18a728e3]"select * from statystyki where stat_data>='".$data_1."' AND stat_data<='".$data_2."' [/sql:1:6a18a728e3] To działa bez problemu: a co z zapytaniem: [sql:1:6a18a728e3]"select * from statystyki where AND stat_data=$data+$vector [/sql:1:6a18a728e3] Jeżli coś takiego nie jest możliwe to będe pisał funkcje. Jezeli jest możliwe to po co pisać - Mysql sam powinien mieć takie operatory zrobione - i ja nie musze ich przeciążać bo przeciż baza wie że pole jest typu date ? -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
[sql:1:4e038047e6]
SELECT * FROM statystyki WHERE UNIX_TIMESTAMP(stat_data) > ( UNIX_TIMESTAMP() - $ilosc_dni*3600*24 )[/sql:1:4e038047e6] -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 8.02.2003 Skąd: katywroclawskie.com Ostrzeżenie: (0%) ![]() ![]() |
Dzięki - to działa poprawnie. Po dopisaniu kliku linijek cała funkcja działa przyzwoicie.
Mam nadzieję że ten cały post nadawał się na to forum ![]() -------------------- who control the past
command the future who command the future conquer the past |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 17:17 |