Automatyczne usuwanie rekordów z bazy |
Automatyczne usuwanie rekordów z bazy |
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:) |
|
|
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;} |
|
|
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] |
|
|
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] -------------------- |
|
|
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) |
|
|
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. Tak, da sie :)
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? 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 ..
|
|
|
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. |
|
|
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 |
|
|
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 ..
|
|
|
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 ..
|
|
|
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);
|
|
|
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 |
|
|
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. |
|
|
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:
data to nazwa kolumny. nie mozesz na niej dokonywac w ten spsoob operacji. zobacz na przyklady date_sub lub date_add w dokumentacji!
[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. 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 ..
|
|
|
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!! |
|
|
Wersja Lo-Fi | Aktualny czas: 21.05.2024 - 17:55 |