ďťż
Podstrony
|
telcocafeWitam, chciałbym dowiedzieć się w jaki sposób napisać skrypt który by automatycznie, co jakiś czas ( w moim wypadku co kilka dni ) czyściłby wybraną tabelę w bazie danych. Ma ktoś pomysł ?? Bardzo proszę o waszą pomoc, byłbym bardzo wdzięczny jeżeli komuś udałoby się taki skrypcik sklecić. ^_^Pozdrawiam Musisz zapamiętywać datę ostatniego czyszczenia. Możesz ją zapisać do pliku, lub przechować w innej tabeli. Wersja z plikiem (załóżmy, że jesteś już połączony z bazą): function oczysc() //;) { // minimalna liczba dni, po których czyści $repeat = 5; // wczytujemy datę zapisaną jako timestamp $last_date = @file_get_contents('czyszczenie.dat'); // jeśli ostatnie czyszczenie było conajmniej $repeat dni temu if (time() - (int)trim($last_date) >= 86400 * $repeat) { @mysql_query('TRUNCATE TABLE `tabela_do_czyszczenia`'); if ($f = @fopen('czyszczenie.dat', 'w')) { fwrite($f, time()); fclose($f); } } } Nie wiem czy działa, pisałem na sucho, ale na pewno wiesz już o co chodzi. Musisz uruchamiać tę funkcję za każdym razem gdy uruchamiasz swój skrypt, tabela będzie czyszczona, tylko gdy zostanie przekoczony limit czasu (tutaj ustawiony na 5 dni). o, widze że zansz się na rzeczy :) , sory że jeszcze głowe zawracam jeszcze, ale czy nie wiedziałbyś w jaki sposób w pełwni zautomatyzować skrypt, tzn. że po wyczyszczeniu automatycznie zapisze się data ostatniego czyszczenia, żeby niewpisywać jej tam ciągle. Masz pomysł ?? ja mam pytanie do Matroxa. Znam php wmiarę dobrze(co chcę napisac to potrafię) ale nie wiem czemu stawaiałeś ten @ znak przed niektorymi wyrazami albo czyściłeś table poleceniem TRUANCE ? To jakiś nowszy standard? @ - nie będą wyświetlane komunikaty o błędach (np. gdy nie bedziemy połączeni z bazą i wywołamy funkcję mysql_query() ) TRUNCATE - standardowe polecenie MySQLa usuwające wszystkie dane z tabeli. Nie widzę w tym nic niezwykłego. [dopisane] o, widze że zansz się na rzeczy , sory że jeszcze głowe zawracam jeszcze, ale czy nie wiedziałbyś w jaki sposób w pełwni zautomatyzować skrypt, tzn. że po wyczyszczeniu automatycznie zapisze się data ostatniego czyszczenia, żeby niewpisywać jej tam ciągle. Masz pomysł ?? Właśnie tak się robi w tej funkcji, którą Ci napisałem. Użytkownik MatroX edytował ten post 20 maj 2005, 20:24 Skrypt działa dobrze, wielkie dzięki, tylko ja właściwie potrzebuje skrypt który nieczyściłby całej tabeli tylko jedną kolumnę, nie wiem czy przy tabeli trzeba dopisać coś w tym skrypcie, proszę o pomoc :( W mysql_query() wpisz: 'UPDATE `tabela` SET `kolumna`=WARTOSC' Gdzie WARTOSC zamieniasz na to czym ma wypełnić daną kolumnę. Zastanawiałem się nad tym skryptem i doszedłem do wniosku że jednak on do końca nie będzie dobrze działał, hmm znowu d**e zawracam. Chodziłoby mi o skrypt tej natury że przykładowo są jakieś dane na stronie dodawane, jedna kolumna w tabeli jest niezmienna w bazie a w drugiej kolumnie są podawane dane np 100 ostatnich, jeżeli zostanie dodana informacja nowa wtedy ostatni wpis jest usuwany, wiedziałbyś jak takie cos zrobić ?? :( Nie mogę Cię zrozumieć. Chodzi Ci o pozostanienie w tabeli jedynie 100 ostatnio dodanych rekordów? Czy też może 100 ostatnio zmodyfikowanych? Twoje ostatnie pytanie nijak nie ma związku z pytaniem z pierwszego postu, chyba szybko zmieniasz zdanie. 100 ostatnich rekordów wszystkie wcześniej maja być wyczyszczone ( po jakimś czasie tak będzie ), hmm nijak ? czyszczenie bazy to to jest, a że zmieniam zdanie to wiem, troche roztargniony ostatnio jestem ale dopiero później zauważyłem że to rozwiązanie będzie lepsze, tak więc chodiz mi o skrypt który rejestrowałby zbiór informacji w danej kolumnie,kiedy nowy rekord by doszedł wtedy ostatni zostałby automatycznie usunięty. Przykład ( może troche głupi, ale chodzi o to żebys zrozumiał ) Jest strona z obrazkami, do kazdego dodawany jest opis użytkownika, 1obrazek dodany dodany 1 opis, 2 dodany - dodany opis, 3 dodany i wtym samym czasie kaowany jest opis przy obrazku nr 1. To powinno Ci pomóc mnie zrozumieć Zrozumiałem, ale czy dobrze... ;) Jeśli dobrze to to powinno pomóc (wstaw zamiast mysql_query()): $ile = mysql_query('SELECT COUNT(*) FROM `tabela`'); $ile = @mysql_fetch_row($ile); $ile = $ile[0] - 20; mysql_query('DELETE FROM `tabela` ORDER BY id ASC LIMIT '.$ile); Zostawia ostatnie 20 rekordów. id - jakieś pole w/g którego ma sortować ok, wielkie dzięki za pomoc, teraz widzę że opłaca się zaglądać an to forum :) no to ja tez sie spytam o coś. Mam tabele przykładowo 'pliki' a w niej dużo pozycji. Jedną z kolumn w tabeli jest autor. Chciałbym zrobić takie coś, żeby stworzyło mi liste 5 autorów, którzy wrzucili najwięcej plików i żeby napisało obok ile wrzucili plików, i jeszcze żeby to posortowało. Da sie takie coś zrobić? Nie sprawdzałem: SELECT autor, COUNT(autor) AS ile FROM `pliki` WHERE 1 GROUP BY autor ORDER BY ile DESC LIMIT 5 Jeśli w składni czegoś nie rozumiesz to... google :) witam sprawdziłem to co napisałeś i stworzyło mi liste Użytkownik ArekS2 edytował ten post 22 maj 2005, 21:23 Właśnie stworzyłem u siebie przykładowa tabelę i sprawdziłem to zapytanie. Wszystko działa jak należy. Kod testujący wyglądał tak: $result = mysql_query('SELECT autor, COUNT(autor) AS ile FROM `pliki` WHERE 1 GROUP BY autor ORDER BY ile DESC LIMIT 5'); while ($row = mysql_fetch_array($result)) echo $row[autor].'-'.$row[ile].'<br>'; ...chodzi jak przecinak :P działa. Dawno sie uczysz php i mysql? To juz chyba pytanie nie na ten dział. Myślę, że temat jest zamknięty skoro wszystkim wszystko działa :) Czy to ważne ile już w tym siedzę? :P jak mam w w bazie danych w jednej tabeli kilka rekordow np. id, firma, model, costam_jeszcze a na WWW chce dac tak aby wyswietlalo mnie sie od gory do dolu alfabetycznie wg. nazwy firmy a pozniej aby kazdy produkt danej firmy byl wyswietlany wg. nazwy modelu to jak mam zrobic takie zapytanie do SQL ? czaisz jak mam np. w bazie: Fox Vanilla 100RLC Fox Vanilla 125 R/RL/RLC Magura Thor Magura Ronin Magura Phaon Magura Asgard to aby wyswietlalo w takiej kolejnosci: Fox Vanilla 100RLC Fox Vanilla 125 R/RL/RLC Magura Asgard Magura Phaon Magura Ronin Magura Thor |
|||
Sitedesign by AltusUmbrae. |