Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 9.11.2008 Ostrzeżenie: (10%)
|
Witam.
Czy jest sposób, żeby dana tabela zawierała maksymalnie X rekordów? Na przykład mam Shoutbox i chcę w bazie trzymać tylko 50 rekordów. Po wysłaniu nowej wiadomości automatycznie kasuje się ostatni wpis w tabeli. Czy obejdzie się to bez PHP (można to zrobić w PHP, ale ja chcę zautomatyzowany proces w samym MySQL)? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
A ja myślę o prostszym rozwiązaniu. Skoro już pobiera informacje z bazy i wie ile ma rekordów to sprawa jest prosta...
Znasz swój limit = 50 Dodajesz nowy rekord bez sprawdzania ilości Sprawdzasz ilość. Jeśli jest większa niż limit robisz delete z takim limit ile wystaje ponad niego. Przykładowo masz 50 i dodałeś do shouta. Zwróci Ci count 51 a więc musisz zrobić delete dla 51-50=1 (IMG:style_emoticons/default/smile.gif) W efekcie zamiast zarżynać bazę zapytaniami robisz proste 2 lub 3 query w zależności czy osiągnąłeś limit czy nie: INSERT INTO shoutbox2 jakieś dane; <-zawsze. SELECT count(id) AS ile FROM shoutbox2; <-zawsze, to lepsze i szybsze niż robić select * i jeszcze potem po stronie php to obliczać, co jest głupotą i marnotrawieniem czasu. DELETE FROM shoutbox2 LIMIT policzona różnica <- opcjonalnie, a i tak zazwyczaj będzie tutaj 1, jeśli już do usuwania dojdzie. Widzisz jak Twoje całe kombinowanie się upraszcza? To jest całość dodawania rekordu wraz z usuwaniem nadmiarowych ponad limit... Takie coś jest już żywcem w sumie do zastosowania. EDIT: Może wyjaśnię czemu tak... Sprawa jest prosta (IMG:style_emoticons/default/smile.gif) DELETE wywala wszystkie rekordy lecąc od początku tabeli do jej końca. Jeśli więc zrobimy mu LIMIT to wywali X pierwszych wpisów. Skoro wiemy ile mamy ogółem, ile mamy jako limit, to wiemy ile jest ponad stan i tyle mu każemy z początku usunąć. Myślę, że to jedno z najprostszych i jednocześnie bardziej eleganckich bez używania transakcji, która jeszcze bardziej by to zabezpieczyła. Jeśli zaś całość zapiszesz jako procedurę w mysql to masz po prostu rakietę, bo całość nawet nie wyjdzie poza silnik bazy.
Powód edycji: [thek]: Wyjaśnienie
|
|
|
|
vegeta [MySQL]Ograniczenia wielkości rekordów 24.11.2010, 19:19:15
CuteOne Hmmm możesz użyć triggera, który przed insertem us... 24.11.2010, 19:27:40
blade-mrn Czy da się to zrobić w MySql-u nie wiem ale w PHP ... 24.11.2010, 19:37:45
vegeta @Spawn: co to za zmienna $db? Wywala mi przy ... 24.11.2010, 22:18:51
kamillo121 $DB zapewne jest to obiekt klasy, która obsłu... 24.11.2010, 22:23:24
Mephistofeles Czy ty w ogóle myślisz, czy po prostu wklejasz fra... 24.11.2010, 22:25:05
vegeta No dobra mam teraz:
Kod$zapytanie_usuniecie =... 24.11.2010, 23:02:32
daros17 Spróbuj tak
[PHP] pobierz, plaintext $zapytanie_us... 24.11.2010, 23:09:12
kamillo121 1. Sprawdź czy warunek if się spełnia, dodaj w śro... 24.11.2010, 23:12:59
CuteOne ale co to w ogóle jest?
if ($zapytanie_usuni... 25.11.2010, 00:12:30
blade-mrn Po pierwsze to nie Spown, avatar to nie wszystko ... 25.11.2010, 11:17:55
vegeta Dzięki wielkie 26.11.2010, 20:41:33 ![]() ![]() |
|
Aktualny czas: 24.12.2025 - 07:29 |