Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z zapytaniem
klag
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
spenalzo
post
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]


--------------------

Go to the top of the page
+Quote Post
klag
post
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]
smile.gif


--------------------
who control the past
command the future
who command the future
conquer the past
Go to the top of the page
+Quote Post
klag
post
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
Go to the top of the page
+Quote Post
spenalzo
post
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.


--------------------

Go to the top of the page
+Quote Post
klag
post
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
Go to the top of the page
+Quote Post
DeyV
post
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..."
Go to the top of the page
+Quote Post
klag
post
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
Go to the top of the page
+Quote Post
DeyV
post
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..."
Go to the top of the page
+Quote Post
klag
post
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
Go to the top of the page
+Quote Post
spenalzo
post
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ę


--------------------

Go to the top of the page
+Quote Post
DeyV
post
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..."
Go to the top of the page
+Quote Post
klag
post
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
Go to the top of the page
+Quote Post
DeyV
post
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..."
Go to the top of the page
+Quote Post
klag
post
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 rolleyes.gif


--------------------
who control the past
command the future
who command the future
conquer the past
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: 21.08.2025 - 17:17