Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Usuwanie danych w bazie MySQL po osiągnięciu piętnastu wpisów
Forum PHP.pl > Forum > Przedszkole
Zeelof
Piszę skrypt shoutboxa na swoją witrynę, jednak nie mogę dojść jak usuwać dane z tabeli po osiągnięciu 15 rekordów.
Prosić kogoś o pomoc?
jaworr
mysql_num_rows
http://php.net/manual/en/function.mysql-num-rows.php
nospor
  1. DELETE FROM tabela ORDER BY date DESC LIMIT 15,200000000

To ci powinno skasowac wszystkie rekordy oprocz 15-stu najswieższych
Zeelof
Cytat(nospor @ 4.02.2011, 14:44:59 ) *
  1. DELETE FROM tabela ORDER BY date DESC LIMIT 15,200000000

To ci powinno skasowac wszystkie rekordy oprocz 15-stu najswieższych


To teraz mam coś takiego:
  1. $shoutbox_usuniecie = "DELETE FROM shoutbox WHERE * DESC LIMIT 10,200000000";
  2. $usuniecie_z_shoutbox = mysql_query ($shoutbox_usuniecie);

I nadal nic ;/

Poza tym co oznacza "200000000"?
melkorm
  1. WHERE * DESC


a cóż to ?
Zeelof
Cytat(melkorm @ 4.02.2011, 15:12:09 ) *
  1. WHERE * DESC


a cóż to ?


A co powinno być w miejscu "*"?
Chciałbym usuwać wszystkie dane w tabeli shoutbox
thek
Widzisz różnicę między swoją składnią a nospora? Po co Where, czemu brak ORDER BY? Tu kompletnie chyba nie wiesz co robisz?
Zeelof
Cytat(thek @ 4.02.2011, 15:18:46 ) *
Widzisz różnicę między swoją składnią a nospora? Po co Where, czemu brak ORDER BY? Tu kompletnie chyba nie wiesz co robisz?


No dobrze, ale jak mam:
  1. $shoutbox_usuniecie = "DELETE FROM shoutbox ORDER BY * DESC LIMIT 2,200000000";
  2. $usuniecie_z_shoutbox = mysql_query ($shoutbox_usuniecie);

To mimo wszystko nie działa...
osl
co się tak uparłeś na tą "*"?
Zeelof
Cytat(osl @ 4.02.2011, 15:41:27 ) *
co się tak uparłeś na tą "*"?


A co zamiast niej czy też "date" powinno być?
osl
to zależy od tego jakie pola masz w bazie danych... potrzebujesz pola, po którym jesteś w stanie stwierdzić, która wiadomość była napisana ostatnio.
Zeelof
Cytat(osl @ 4.02.2011, 15:46:15 ) *
to zależy od tego jakie pola masz w bazie danych... potrzebujesz pola, po którym jesteś w stanie stwierdzić, która wiadomość była napisana ostatnio.


A czy do tego potrzebuję również pole "id"?

Właściwie to obojętne w jakim miejscu kodu wstawię?
Aktualnie mam tak:
  1. // zapis do dwudziestu wiadomości shoutboxa
  2. if (isset ($_POST['wyslij']))
  3. {
  4. $shoutbox_zapis = "insert into shoutbox (login, tresc) values ('$login','{$_POST['tresc']}')";
  5. $obsluga_zapisu = mysql_query ($shoutbox_zapis);
  6. // usuwanie wiadomości shoutboxa, gdy więcej niż 20
  7. $shoutbox_usuniecie = "DELETE FROM shoutbox ORDER BY id, login, tresc DESC LIMIT 20,200000000";
  8. $usuniecie_z_shoutbox = mysql_query ($shoutbox_usuniecie);
  9. }


Nadal nie kasuję mi wiadomości...
kadlub
Cytat(osl @ 4.02.2011, 15:46:15 ) *
to zależy od tego jakie pola masz w bazie danych... potrzebujesz pola, po którym jesteś w stanie stwierdzić, która wiadomość była napisana ostatnio.

a od czego jest id i auto_increment
wystarczy zapytanie sprawdzające ilość rekordów
zapytanie usuwające najmniejsze id
Zeelof
Cytat(kadlub @ 4.02.2011, 16:18:27 ) *
a od czego jest id i auto_increment
wystarczy zapytanie sprawdzające ilość rekordów
zapytanie usuwające najmniejsze id


No to mam "id", ale powyższy skrypt nadal nie działa...
kadlub
  1. <?php
  2. include("db.php");
  3. $zapytanie=mysql_query("SELECT * FROM pobrane");
  4. $ktory=mysql_fetch_array(mysql_query("SELECT id_pobrane FROM pobrane LIMIT 19,20") );
  5.  
  6. $ostatnie=$ktory['id_pobrane']-19;
  7. if (mysql_num_rows($zapytanie)=="20") {
  8.  
  9. $usun=mysql_query("DELETE FROM pobrane WHERE id_pobrane=$ostatnie");
  10.  
  11. $zmienna1=mysql_query("INSERT INTO pobrane (nazwa_pliku , liczba_pobran) values ('cośtam' , '54');");
  12. }
  13. else {
  14.  
  15. $zmienna2=mysql_query("INSERT INTO pobrane (nazwa_pliku , liczba_pobran) values ('costam' , '67');");
  16. }
  17.  
  18. ?>
  19.  
  20.  

może to coś ci pomoże tylko powstawiaj swoje nazwy pól z tabel i baze danych swoją

skrypt sprawdza ile jest rekordów w tabeli jeśli jest mniej niż 20 zapisuje normalnie jeśli jest wjęcej niż 20 usuwa ostatni i zapisuje nowy

nospor
Zeelof przeszedles chyba samego siebie z wariacjami bez powtórzen w cyklu "Jak zepsuc dobrze napisane zapytanie " :/
Skoro u Ciebie id określa kolejnosc wiadomosci to ma byc tak:
DELETE FROM shoutbox ORDER BY id DESC LIMIT 20,200000000

a 2000000 to poprostu okreslenie w tym przypadku wszystkich rekordów. mysql niestety nie posiada znaku nieskonczonosci wink.gif
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.