![]() |
![]() ![]() |
![]() |
![]()
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: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Hmmm możesz użyć triggera, który przed insertem usunie starsze wpisy ale chyba łatwiej jest to zrobić poprzez PHP
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czy da się to zrobić w MySql-u nie wiem ale w PHP można to zrobić np tak:
40 to ilość przechowywanych rekordów. -------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 9.11.2008 Ostrzeżenie: (10%) ![]() ![]() |
@Spawn: co to za zmienna $db? Wywala mi przy Twojej pierwszej linijce błąd:
Kod Fatal error: Call to a member function query() on a non-object in (...) on line 16
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 6 Dołączył: 26.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
$DB zapewne jest to obiekt klasy, która obsługuje bazę danych, jak sam skrótowiec wskazuje DB -database
![]() Po prostu wykonaj normalne zapytanie do bazy... Ten post edytował kamillo121 24.11.2010, 22:24:26 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Czy ty w ogóle myślisz, czy po prostu wklejasz fragmenty do edytora?
Zastanów się jak w swoim skrypcie komunikujesz się z bazą, używasz do tego jakiejś klasy? Wątpię, więc czemu wstawiasz bezmyślnie kod używający obiektu jakiejś klasy zarządzającej bazą? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 9.11.2008 Ostrzeżenie: (10%) ![]() ![]() |
No dobra mam teraz:
Kod $zapytanie_usuniecie = mysql_query ("SELECT * FROM shoutbox2"); if ($zapytanie_usuniecie->mysql_num_rows > 50) { $usuwanie = $zapytanie_usuniecie->fetch_assoc(); $zapytanie_usuniecie = mysql_query ("DELETE FROM shoutbox2 WHERE id=".$usuwanie['id']); } Ale nie usuwa mi danych, brak błędu. Na 98% wiem, że jest coś z tymi ->. Pytanie: co zrobić? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 233 Pomógł: 27 Dołączył: 27.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj tak
Ten post edytował daros17 24.11.2010, 23:09:53 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 6 Dołączył: 26.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
1. Sprawdź czy warunek if się spełnia, dodaj w środku jakieś echo tak dla kontroli żeby się upewnić że przechodzi warunek
2.1. Jeżeli tak to odpal sobie phpmyadmin i poćwicz zapytania sql 2.2. Jeżeli nie to wiesz co zrobić Ten post edytował kamillo121 24.11.2010, 23:13:34 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
ale co to w ogóle jest?
![]() if ($zapytanie_usuniecie->mysql_num_rows > 50) naucz się podstaw bo z każdym "problemem" wynikającym z braku wiedzy będziesz leciał na forum.... |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze to nie Spown, avatar to nie wszystko
![]() Po drugie oczywiście kamillo121 ma rację jeśli chcesz się łączyć z bazą w ten sposób to robi się to tak:
A tak możesz sprawdzić ile rekordów zwróciło zapytanie:
Natomiast co do twojego skryptu to to powinno chyba być tak:
Ten post edytował blade-mrn 25.11.2010, 11:18:55 -------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#12
|
|
![]() 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 ![]() 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 ![]()
Powód edycji: [thek]: Wyjaśnienie
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 9.11.2008 Ostrzeżenie: (10%) ![]() ![]() |
Dzięki wielkie
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.06.2025 - 01:39 |