Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] usuwanie rekordów od 2 tyg w tył
Forum PHP.pl > Forum > Przedszkole
damianm2007
witam.

chce zrobić usuwanie wpisów z bazy od 2 tyg w tył do dalej czyli chce zachowac tylko wpisy z ostatnich 2 tyg a reszte usuwac

mysle ze nalezy to zrobic na zasadzie delete z bazy ale tak mysle co wpisac w zapytaniu wykonywanym do bazy hmmm


a wiec mam tak o

  1.  
  2. <?php
  3.  
  4. $zapyt = "DELETE FROM `ekartka` WHERE `id`= $usun";
  5. //$zapyt = "DELETE FROM `ankieterzy` WHERE `nazwisko` = 'Kowalski'";
  6. $res = mysql_query($zapyt);
  7.  
  8. {
  9. print '<p>id usuniety</p>';
  10. }
  11. else
  12. {
  13. print '<p>Nie udalo sie usunac </p>' . mysql_error() ;
  14. }
  15. ?>
  16.  


co tu dopisać aby kasowało z ponad 2 tyg a ostatnie 2 nie ruszało ?
Daiquiri
Musisz odnieść się do daty. Najpierw pobierz aktualną datę i odejmij od niej dwa tygodnie. Potem dodaj warunek
  1. if(data_w_bazie < obliczona_data) to kasujemy dane

Innymi słowy w pseudokodzie mysqlowym robisz DELETE wszystkiego WHERE data_w_bazie < obliczona_data
damianm2007
mam np pobieranie daty z bazy z limitem wyświetlania 5 najnowszych

  1.  
  2. <?php
  3. include ("cfg.php");
  4.  
  5. $query = mysql_query ("SELECT * FROM ekartka ORDER BY czas DESC limit 5");
  6. while ($rekord = mysql_fetch_assoc($query)) {
  7. $Id = $rekord['id'];
  8. $czas = $rekord['czas'];
  9. $imagekartka = $rekord['imagekartka'];
  10.  
  11. print ("Data wysłania:$czas <br />Wybrana e-kartka <img src='$imagekartka'><br />");
  12.  
  13. }
  14.  
  15.  
  16. ?>


i to mozna wykozystac dodajac tam np dyrekrywe np. kasuj starsze jak 14 dni
tylko hmmm jak...
Daiquiri
Usuń limit, chyba że wiesz ile będzie tam rekordów. Jeżeli chcesz to zrobić w ten sposób to:
  1. while() { // Twój while
  2. if ($czas jest starszy niż $aktualna_data_minus_dwa_tygodnie)
  3. // to DELETE FROM ... WHERE ID = $id;
  4. }
Kshyhoo
Można tak:
  1. DELETE FROM ekartka WHERE czas <DATE_SUB(NOW(),INTERVAL 14 DAY
damianm2007
Cytat(Kshyhoo @ 18.01.2011, 12:57:12 ) *
Można tak:
  1. DELETE FROM ekartka WHERE czas <DATE_SUB(NOW(),INTERVAL 14 DAY


hmmm cos nie hasa ale zrobilem tak...

  1.  
  2. <?php
  3. include ("cfg.php");
  4.  
  5. while ($rekord = mysql_fetch_assoc($wynik))
  6. {
  7. $czas = $rekord ["czas"];
  8. }
  9.  
  10. $time = time() - (3600 * 24 * 30);
  11.  
  12. mysql_query("DELETE FROM ekartka WHERE '.czas.'<'.$time.';");
  13.  
  14. ?>


i wywala błąd

  1. Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/usuwanie.php on line 4

Daiquiri
Zapytanie jest błędne lub nic nie zwraca.


@down:
Najwidoczniej autor tematu jej też nie odkrył.
Fifi209
Cytat(Daiquiri @ 19.01.2011, 18:51:22 ) *
Zapytanie jest błędne lub nic nie zwraca.

Ameryki to Ty nie odkryłeś.

@up

  1. DELETE FROM ekartka WHERE '.czas.'<'.$time.'


WTF?

Co to jest '.czas.' ?
celbarowicz
Kolego, w jakim formacie jest data w bazie?
aby cofnąć czas od dzisiejszej daty
  1. $dni=14;
  2. echo $wynik = date("Y-m-d",( strtotime("-$dni day")));
  3.  

Możesz zamienić w/w czas na time i zacząć kasować
Nie sprawdzałem jak to zachowuje się przy zmianie czasu letniedo i ...
// jeśli czas w bazie nie jest time to pobierasz dane z bazy
i musisz zrobić tak, aby daty były w jednakowym formacie time
  1. //
  2. strtotime($twoja_data_z_bazy);
  3.  
  4. strtotime($wynik);
  5.  
  6.  
  7.  
  8. if(strtotime($twoja_data_z_bazy)<strtotime($wynik)){usuwasz rekord z bazy używając indeksu lub w inny wykombinowany sposób }else(questionmark.gif)
  9.  
  10.  
Kshyhoo
Cytat(damianm2007 @ 19.01.2011, 18:25:54 ) *
hmmm cos nie hasa ale zrobilem tak...

Dostałeś gotowy kod, miałeś go tylko wklepać. Chciałeś usuwać rekordy starsze niż 14 dni...
damianm2007
Cytat(celbarowicz @ 19.01.2011, 20:08:06 ) *
Kolego, w jakim formacie jest data w bazie?
aby cofnąć czas od dzisiejszej daty
  1. $dni=14;
  2. echo $wynik = date("Y-m-d",( strtotime("-$dni day")));
  3.  

Możesz zamienić w/w czas na time i zacząć kasować
Nie sprawdzałem jak to zachowuje się przy zmianie czasu letniedo i ...
// jeśli czas w bazie nie jest time to pobierasz dane z bazy
i musisz zrobić tak, aby daty były w jednakowym formacie time
  1. //
  2. strtotime($twoja_data_z_bazy);
  3.  
  4. strtotime($wynik);
  5.  
  6.  
  7.  
  8. if(strtotime($twoja_data_z_bazy)<strtotime($wynik)){usuwasz rekord z bazy używając indeksu lub w inny wykombinowany sposób }else(questionmark.gif)
  9.  
  10.  


Sprawdzę dziś albo jutro



Cytat(Kshyhoo @ 19.01.2011, 20:33:00 ) *
Dostałeś gotowy kod, miałeś go tylko wklepać. Chciałeś usuwać rekordy starsze niż 14 dni...


no wiem i nie działa a dobrze wstawilem

taki błąd wywala
Kod
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 '' at line 1

czas mam jako datetime w bazie z php wpisuje się automatycznie przy dodawaniu poprzez

  1.  
  2.  
  3. $czas = date("Y-m-d H:i");
  4.  
  5. if(isset($_POST['submit'])) {
  6. $zapytanie = "INSERT INTO ekartka(czas) VALUES (NOW())";
  7.  


^ kawałek z kodu.


//// Edit Działa już smile.gif $query = mysql_query("DELETE FROM ekartka WHERE czas<DATE_SUB(NOW(),INTERVAL 14 DAY)") or die (mysql_error());
brakowało zamknięcia za DAY....
Kshyhoo
Cytat(damianm2007 @ 19.01.2011, 21:03:22 ) *
no wiem i nie działa a dobrze wstawilem

Wklej kod zapytania.
celbarowicz
kshyhoo. ---w edit napisał,że to co podałeś działa, tylko zapomniał dopsac nawiasu. sam będę używał.
Kshyhoo
Wiem, że działa... inaczej bym nie podawał tego kodu ;p
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.