Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie rekordów powyżej 100
Forum PHP.pl > Forum > Bazy danych > MySQL
p4oj
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.
webasek
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ć
zegarek84
lub
  1. DELETE FROM wpisy WHERE WP_ID < (SELECT WP_ID FROM wpisy ORDER BY WP_ID LIMIT 100, 1)
p4oj
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 )
zegarek84
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 )
p4oj
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.
zegarek84
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...
p4oj
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.
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.