Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 3 tygodnie temu...
Forum PHP.pl > Forum > Przedszkole
venom-ek
czesc, chcialem napisac skrypt, ktory bo 3 tygodniach od wpisu usuwalby jakies tam rekordy z bazy MySQL - chodzi wylacznie o wybrane wiersze w tabeli. wszystko wiem jak zrobic, bo:

  1. <?php 
  2.  
  3. // zmienne do ustawienia jak zawsze
  4.  
  5. $host=localhost;
  6. $user=root;
  7. $password=&#092;"*****\";
  8.  
  9. $sql=mysql_connect($host, $user, $password);
  10. mysql_select_db(&#092;"ogloszenia\");
  11.  
  12. $data=date(&#092;"Y.m.j\");
  13. $stara_data= NO WLASNIE CO questionmark.gif?!!!
  14.  
  15. $rodzaj=&#092;"sprzedam\";
  16.  
  17. $zapytanie = &#092;"SELECT * FROM \".$rodzaj.\" WHERE data LIKE \"%\".$stara_data.\"%\" \";
  18.  
  19. $search = mysql_query($zapytanie);
  20. $znalezione = mysql_num_rows($search);
  21.  
  22. if($znalezione > 0)
  23.  {
  24.  print(&#092;"usuwanie);
  25.  }
  26.  
  27. ?>


Oczywiscie zamiat wydrukowania usuwania bedzie to co trzeba ;-)

chcialbym teraz od was dowiedziec sie jak zrobic, aby $stara_data byla taka, jaka byla 3 tygodnie wczesniej od $data, a takze jak przeprowadzic takie kasowanie ze wszystkie OD daty powiedzmy 25.10.2004 - 15.10.2004 czy ile tam tez 3 tygodnie by wynosily. no bo tutaj usunie tylko ta konkretna. jezeli mialbym pewnosc ze skrypt bedzie odpalany codziennie, to ok. ale takiej pewnosci miec nie moge ;-) chociaz jakby to dodac na stronie glownej.... ;]]]]]

z gory dziekuje za pomoc !
rogrog
hej

najlepiej to zrobić bezpośrednio w zapytaniu SQL, bez podawania daty z PHPa. btw nie powinieneś używać LIKE '%%' do daty, jak już to =. LIKE jest do tekstu...

na dole forum masz link do manuala MySql

zainteresuj się:
- operatorem BETWEEN
- funkcą NOW()
- konstrukcjami z INTERVAL

ta wiedza powinna Ci wystarczyć do tego zadania smile.gif

pozdrawiam
rogrog
Vertical
  1. <?php
  2. //łączenie się do bazy, ustawianie zmiennych (oprócz $stara_data) itp. itd.
  3. $zapytanie = &#092;"SELECT * FROM $rodzaj\";
  4. $query = mysql_query($zapytnie);
  5. $row = mysql_fetch_array($query);
  6. //definicja $stara_data
  7. $stara_data = $row['data'];
  8. if($stara_data = (date(Y-m-d, strtotime(&#092;"-21 days\")))
  9. {
  10. $sql = &#092;"DELETE FROM $rodzaj WHERE data = date(Y-m-d, strtotime(-21 days))\";
  11. }
  12. ?>
Aztech
w zadzie wystarczy taka modyfikacja:
  1. DELETE FROM $rodzaj WHERE DATA BETWEEN NOW() AND NOW() - INTERVAL 3 WEEKS;
venom-ek
dziekuje wszystkim za odpowiedzi !

odnosnie skryptu Verticala (nie usuwa sad.gif) to sprawdzilem nawet samo to zapytanie:
DELETE FROM $rodzaj WHERE data = date(Y-m-d, strtotime(-21 days))

($rodzaj zamienilem oczywiscie) i nie chodzi. wywala mi cos takiego:

Cytat
Error

SQL-query : 

DELETE FROM zamienie WHERE DATA = date( Y - m - d, strtotime(
- 21days
) )

MySQL said:

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '( Y - m - d, strtotime(  -21days ) )' at line 1


a jezeli chodzi o odp. Aztecha to tez sie pluje:
Cytat
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WEEKS' at line 1


zastanawiam sie czy to nie jest problem tego, ze kolumna 'data' jest ustawiona jako TEXT , a wartosc podawana jest ze skryptu... chociaz problemow przeciez raczej byc nie powinno bo format daty ten sam, tzn np. 2004.10.26 ... a moze nie ten sam i trzeba odwrocic kolejnoscia lata/miesiace czy jakos :? ?
wiem ze durne bo moglem inaczej zrobic ale wolalbym teraz nie zamieniac typu zmiennych, chociaz jezeli nie bedzie innego wyjscia... :/
Aztech
Wydaje mi sie ze Y-m-d musisz wziasc w apostrofy 'Y-m-d'
venom-ek
zanim jeszcze cokolwiek wyskoczy, tzn blad wlacza mi sie okienko JavaScript :-)

undefined:
(....i cale zapytanie...)
Aztech
No jeśli chodzi o JavaScript to ja noga więc Ci nie pomogę - sry, ale przykład z BETWEEN powinien ma 100% działać
venom-ek
no to ja juz nie wiem... sad.gif
zamienilem nawet typ na datetime i to samo sad.gif
Aztech
wpisz zamiast twojego SELECT
  1. <?php
  2.  
  3. sql = 'DELETE FROM '.$rodzaj.' WHERE data BETWEEN NOW() and NOW() - INTERVAL 3 WEEKS';
  4.  
  5. ?>


całość wygląda tak:
  1. <?php
  2.  
  3. $host=localhost;
  4. $user=root;
  5. $password=&#092;"*****\";
  6.  
  7. $sql=mysql_connect($host, $user, $password);
  8. mysql_select_db(&#092;"ogloszenia\");
  9. sql = 'DELETE FROM '.$rodzaj.' WHERE data BETWEEN NOW() and NOW() - INTERVAL 3 WEEKS';
  10.  
  11. ?>

(*) wtedy za każdym wywołaniem skryptu będzie ci usuwał z bazy niepotrzebne dane
venom-ek
ale ja wiem ;]
i wiem ze to powinno dzialac

ale z *jakis* przyczyn nie dziala... a ja nie jestem w stanie rozgryzc z jakich sad.gif (samo zap. do mysql jest cos bledne - sprawdzalem na 2 bazach nie to zeby u mnie na komputerze cos nie tak bylo i to samo identycznie... jak wyzej pisalem sad.gif)
rogrog
  1. <?php
  2. ?>


questionmark.gif
Aztech
(*) sprawdz jak radzi rogrog jaki masz ostatni error
(*) czy inne zapytania wykonuja sie poprawnie
(*) czy aby masz na pewno uprawnienia do tej bazy?
venom-ek
no przeciez chlopaki pisalem winksmiley.jpg

Cytat
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE data BETWEEN NOW() and NOW() - INTERVAL 3 WEEKS' at line


baza dziala jak nalezy - inne zapytania poprawnie sa wykonywane, a uprawnienia mam napewno winksmiley.jpg
Aztech
Zapomniałeo o nawiasach smile.gif
  1. WHERE DATA BETWEEN NOW() AND (NOW() - INTERVAL 3 WEEKS)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.