Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Usuwanie rekordów powyżej 100
p4oj
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Witam;
Słaby jestem w mysql-u. Wpisuje do tabeli rekordy i chciałbym najstarsze zostały usunięte jeśli przekroczą liczbę 100 wpisanych rekordów. Opcja datowa nie wchodzi w grę bo dane zbierane są w różnych odstępach czasowych.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
webasek
post
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Zapytanie może wyglądać następująco

  1. DELETE FROM wpisy WHERE WP_ID NOT IN (SELECT WP_ID FROM wpisy ORDER BY WP_Data ASC LIMIT 100 )


Wpisuje bez sprawdzenia ale powinno działać


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


lub
  1. DELETE FROM wpisy WHERE WP_ID < (SELECT WP_ID FROM wpisy ORDER BY WP_ID LIMIT 100, 1)


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
p4oj
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Cytat(zegarek84 @ 27.11.2008, 16:28:27 ) *
lub
  1. DELETE FROM wpisy WHERE WP_ID < (SELECT WP_ID FROM wpisy ORDER BY WP_ID LIMIT 100, 1)



Zwraca mi taki błąd:
You can't specify target table 'dok' for update in FROM clause

  1. DELETE FROM dok WHERE id < (SELECT id FROM dok ORDER BY id ASC LIMIT 200 )
Go to the top of the page
+Quote Post
zegarek84
post
Post #5





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(p4oj @ 27.11.2008, 19:45:41 ) *
Zwraca mi taki błąd:
You can't specify target table 'dok' for update in FROM clause

  1. DELETE FROM dok WHERE id < (SELECT id FROM dok ORDER BY id ASC LIMIT 200 )

tzn masz na mysli to co przerobiłeśquestionmark.gif tak jak napisałes w sumie nic nie usunie gdyż zbyt wiele wyników masz - potrzebny Ci tylko jeden i widzę że teraz nie setny a dwusetny chcesz... powinien być przecinek i jedynka, i nie ASC tylko DESC - najstarsze mają najmniejszy numer wiec sortujesz od najwiekszego, znajdujesz ostatni jaki ma nie być usuniety i wszystkie poniżej mają zostać usunięte:

  1. DELETE FROM dok WHERE id < (SELECT id FROM dok ORDER BY id DESC LIMIT 200, 1 )


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
p4oj
post
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Próbowałem to sam modyfikować i stąd liczba 200, ale chyba za cienki jestem.
Nie chciałbym być umolny, ale mimo tej modyfikacji i tak dostaje ten sam błąd.
Go to the top of the page
+Quote Post
zegarek84
post
Post #7





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


a masz uprawnienia do modyfikacji bazy? sprawdź czy zadziała select * - to powinno wyświetlić te rekordy które maja być usunięte - jeśli zadziała to cos z uprawnieniami jest nie tak...

Ten post edytował zegarek84 28.11.2008, 00:49:17


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
p4oj
post
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Cytat(zegarek84 @ 28.11.2008, 00:42:59 ) *
a masz uprawnienia do modyfikacji bazy? sprawdź czy zadziała select * - to powinno wyświetlić te rekordy które maja być usunięte - jeśli zadziała to cos z uprawnieniami jest nie tak...


Po odespaniu doszukałem sie tego -> http://bugs.mysql.com/bug.php?id=5037

Zgodnie ze wskazówkami usuwa stare rekordy jak trzeba
  1. DELETE FROM TABLE1 WHERE TABLEID IN (
  2. SELECT TABLEID FROM (SELECT TABLEID FROM TABLE1 WHERE TABLEID = 2689891) AS EWTABLENAME

Dziękuje za pomoc.

Ten post edytował p4oj 28.11.2008, 11:16:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 03:54