Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Automatyczne usuwanie rekordów z bazy
maciu
post 14.09.2003, 14:43:48
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


W bazie danych jednym z pól tabeli jest DATA. W jaki sposób zrobić, żeby rekordy zostały automatycznie usuwane gdy wartość pola DATA przekroczy prawdziwą date, np. rekord w polu DATA ma wartość 2003-09.13, data ta jest już "historią" więc rekord powiniem zostać automatycznie usunięty.

Wydaje się, że jest to prosta operacja, ale chyba tak nie jest:)
Go to the top of the page
+Quote Post
jono
post 14.09.2003, 14:45:33
Post #2





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Wrocław

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


Najlepiej zapisuj ta przyszłą datę w formacie time(), bo wtedy nie będzie problemu z porównaniem:
[php:1:a100724c7f]<?php
if(time() < $czaszbazy){
//i teraz usuwanie tego rekordu
}

?>[/php:1:a100724c7f]


--------------------
if(function_exists("zrozum_kobiete")){
echo "Niemożliwe!"; exit;}
Go to the top of the page
+Quote Post
jaco
post 14.09.2003, 14:52:10
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 1
Dołączył: 15.01.2003

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


a nawet:

[php:1:a59670f10c]<?php
mysql_query("DELETE FROM tabela WHERE date<=".time());
?>[/php:1:a59670f10c]
Go to the top of the page
+Quote Post
scanner
post 14.09.2003, 16:20:38
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




[php:1:7c983bf610]<?php
mysql_query("DELETE FROM tabela WHERE date<=NOW()");
?>[/php:1:7c983bf610]


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
maciu
post 15.09.2003, 08:36:17
Post #5





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


Jeszcze jedno pytanie

Chce zrobić formularz w którym będzie można wybrać dzień, miesiąc i rok i następnie z bazy danych wyświetli rekordy które w polu DATA odpowiadają dacie wybranej w formularzu.
Najłatwiej zrobić to w taki sposób, że w tabeli pole DATA rozdzielić na trzy: dzień, miesiąc i rok. Da się coś takiego zrobić z jednym polem DATA?

Jeszcze jedna uwaga to mojego wcześniejszego pytania. Mówicie, żebym date w bazie zapisywał w formacie TIME, ale przecież format time zapisuje tylko godziny bez daty (GG:MM:SS)
Go to the top of the page
+Quote Post
kurtz
post 15.09.2003, 08:52:43
Post #6





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


Hej
Cytat
Chce zrobić formularz w którym będzie można wybrać dzień, miesiąc i rok i następnie z bazy danych wyświetli rekordy które w polu DATA odpowiadają dacie wybranej w formularzu.  
Najłatwiej zrobić to w taki sposób, że w tabeli pole DATA rozdzielić na trzy: dzień, miesiąc i rok. Da się coś takiego zrobić z jednym polem DATA?
Tak, da sie :)

Jesli to MySQL to masz funkcje MONTH(), DAY() oraz YEAR(). Wiecej o w/w funkcjach oraz w jakiej wersji MySql masz ktora dostepna znajdziesz pod adresem: http://www.mysql.com/doc/en/Date_and_time_..._functions.html

Odnosnie budowania zapytan: zwroc uwage by wybieral DISTINCTa bo inaczej baardzo ci sie rozmnoza wyniki (distinct to znaczy niepowtarzalnie).

Cytat
Jeszcze jedna uwaga to mojego wcześniejszego pytania. Mówicie, żebym date w bazie zapisywał w formacie TIME, ale przecież format time zapisuje tylko godziny bez daty (GG:MM:SS)
W MySQL (pewnie o niego chodzi) masz pole tylko TIMESTAMP. Ono moze przechowywac nie tylko date ale i czas. Wizualnie zalezy to od tego ile znakow przeznaczasz na pole. Masz rowniez do dyspozycji typ Datetime (czyli data i czas). Wiecej o typach zwiazanych z czasem i data: http://www.mysql.com/doc/en/Date_and_time_types.html


Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
maciu
post 15.09.2003, 10:03:08
Post #7





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


Dzięki Kurtz, zaraz biorę się za lekture mysql

Nie rozumiem tylko Twojego stwierdzenia, że w MySql jest pole tylko typu TIMESTAMP. Przecież pole TIME też jest o czym zresztą jest napisane w postach wyżej.
Go to the top of the page
+Quote Post
maciu
post 15.09.2003, 12:12:39
Post #8





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


coś nie bardzo mi wychodzi

Mam takie pytanie do bazy danych

[php:1:64aa8f0c32]
select * from tabela where DAY(data('$dzien'))
[/php:1:64aa8f0c32]

gdzie:
zmienna $dzien pochodzi z formularza z którego wybieramy liczbe z zakresu 1-31
pole data w bazie ma format TIMESTAMP[8]

Wykonanie tego pokazuje błędy
Go to the top of the page
+Quote Post
kurtz
post 15.09.2003, 12:36:15
Post #9





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


hej
Cytat
Nie rozumiem tylko Twojego stwierdzenia, że w MySql jest pole tylko typu TIMESTAMP. Przecież pole TIME też jest o czym zresztą jest napisane w postach wyżej.
Mysql obsluguje kilka typow pola dla zapisu daty i czasu. TIME sluzy wylcznie do zapsiania godziny, Date daty. DATETIME oraz TIMESTAMP lacza obie funkcjonalnosci. TObie zostawiam wybor zaleznie od potrzeb.


Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
kurtz
post 15.09.2003, 12:38:37
Post #10





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


Hej
Cytat
coś nie bardzo mi wychodzi

Wyglada na to ze masz solidny blad w zapytaniu

Prawdopodobnie potrzebujesz:
[sql:1:42a1eeb405]
select * from tabela where DAY(data) = '$dzien'
[/sql:1:42a1eeb405]


Podpowiedz: do zapytan sql lepszy (jak widac ;) jest znacznik [sql] a nie [php] ;)


Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
maciu
post 15.09.2003, 15:57:46
Post #11





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


niestety to zapytanie, które mi podałeś również nie działa. Wyświetla błąd Supplied argument is not a valid MySQL result resource w kodzie mysql_fetch_array($zapytanie);
Go to the top of the page
+Quote Post
maciu
post 15.09.2003, 16:22:08
Post #12





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


już wszystko w porządku.
Zamiast funkcji DAY zastosowałem DAYOFMONTH i działa. To chyba sprawka starej wesji Mysql
Go to the top of the page
+Quote Post
maciu
post 16.09.2003, 08:29:16
Post #13





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


jeszcze jedno zapytanie dotyczące daty

Tabela taka jak w przykładzie wyżej, tylko tym razem ma wyszukiwać rekordy z datą o 4 więcej niż data dzisiejsza. Zrobiłem takie zapytanie:
[sql:1:44c65e6de0]
select * from tabela where data(NOW(), INTERVAL 4 DAY)
[/sql:1:44c65e6de0]

próbowałem równeż

[sql:1:44c65e6de0]
select * from tabela where data(NOW() + INTERVAL 4 DAY)
[/sql:1:44c65e6de0]

ale rówenież nie działa.
Go to the top of the page
+Quote Post
kurtz
post 16.09.2003, 09:08:25
Post #14





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


Hej
Cytat
jeszcze jedno zapytanie dotyczące daty

Tabela taka jak w przykładzie wyżej, tylko tym razem ma wyszukiwać rekordy z datą o 4 więcej niż data dzisiejsza.

oj nieladnie. mowiles ze zaintersujesz sie dokumentacja do mysql gdy idzie o operacje na datach i czasie.

na poczatku http://www.mysql.com/doc/en/Date_and_time_..._functions.html jest zapytanie bardzo podobne do tego co ty potrzebujesz. wstyd ;p

tobie prawdopodobnie jest potrzebne [sql:1:3fd634417e]SELECT * FROM tabela
WHERE TO_DAYS(NOW()) - TO_DAYS(data) > 4[/sql:1:3fd634417e]

A teraz komenatrz do poprzednich
Cytat
Zrobiłem takie zapytanie:
[sql:1:3fd634417e]
select * from tabela where data(NOW(), INTERVAL 4 DAY)
[/sql:1:3fd634417e]

próbowałem równeż

[sql:1:3fd634417e]
select * from tabela where data(NOW() + INTERVAL 4 DAY)
[/sql:1:3fd634417e]

ale rówenież nie działa.
data to nazwa kolumny. nie mozesz na niej dokonywac w ten spsoob operacji. zobacz na przyklady date_sub lub date_add w dokumentacji!

wynik powinnes rowniez do czegos porownac - inaczej zapytanie nie ma sensu.

Uwaga: proboj zbudowac dzialajce zapytanie bazujac na tych ktore sa w dokumentacji - twoje pomysly niestety nie sa nawet zgodne z normai jezyka - raczej wiec nie beda dzialac :


Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
maciu
post 16.09.2003, 11:42:12
Post #15





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


Sorki Kurtz, ale jezcze nie do końca mi to działa (przeczytałem tą część manuala)

Jap wpisuje takie zapytanie
[sql:1:f1501fc5f9]
select * from tabela WHERE TO_DAYS(NOW()) - TO_DAYS(data) <=2
[/sql:1:f1501fc5f9]
to zwraca mi wyniki z przedziału 14-16 wrzesnia

Natomiast gdy zapytanie jest takie
[sql:1:f1501fc5f9]
select * from tabela WHERE TO_DAYS(NOW()) - TO_DAYS(data) >=2
[/sql:1:f1501fc5f9]
to powinno zwracać wynik z przedziału 16-18 września. Dobrze myśle?

A nie zwraca!!
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 Wersja Lo-Fi Aktualny czas: 21.05.2024 - 17:55