Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: shoutbox
Forum PHP.pl > Forum > PHP
koskitos
chce zrobic shputbox. Wiem chyba jak sie zabrac. Dodawanie, wczytywanie - no problem.
Ale mam dwa pytania:
1. W miarę dodawania wpisów ID będzie rosło, a stare wpisy usuwane. Jak sobie z tym poradzić? Myślałem, aby nie robić pola ID...
2. Jak usunąć tabeli wszystkie wpisy pozostawiając 10 najnowszych. Chcę użyć jednego zapytania...
scanner
a. po co usuwac stare wpisy?
b. ID może być naprawdę duże i niczemu to nie przeszkadza

Pozatym, pole ID zawsze jest potrzebne jesli chcesz w jakiś sposób administrowac contentem. Jak inaczej odnajdziesz okreslony rekord wśród innych?
koskitos
Mam swoje powody.
Wpisów będzie napraaawde duużo. Z tego winkają moje pytania.
Muszę usuwać stare wpisy - usune te z przed tygodnia - poradze sobie,
ale ID jest problemem.
Nie da się ustawić, aby ID było dodawane od najmniejszych liczb?
sf
Ile to jest duzo? Ile na dzien? Z moich wyliczen wynika, ze zwykly serial z postgresa wystarczy Ci na 68 lat jesli jeden wpis bedzie co sekunde.
Termit_
W MySQL zaś, ustawiając typ kolumny z ID na BIGINT UNSIGNED, otrzymujesz maksymalną wartość wynoszącą 18446744073709551615. Chyba starczy na jakiś czas? smile.gif.

Zresztą, chyba INT też by starczył.

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
koskitos
OK, a jeszcze jedno. smile.gif
Jak usunąć za pomocą jednego zapytania najstarsze wpisy z tabeli, pozostawiająć jedynie 30 najnowszych.
sf
Nie da się bez podzapytania.
koskitos
a jak zrobic, aby w ramce pasek przewijania po otworzeniu strony był przewinięty na dół...
TomASS
Możesz wykorzystać do tego etykiety. Oraz window.location na początku strony.
kszychu
To jeszcze w kwestii ID: może zamiast id użyć pola datetime?
Spirit86
Możesz zrobić tak:
Gdy listujesz wszystkie wypowiedzi, zliczaj je
  1. <?php
  2. $POLICZ_REKORDY = 0;
  3. while(PETLA)
  4. {
  5. $POLICZ_REKORDY++;
  6. (...)
  7. }
  8.  
  9. ?>

po czym zadajesz pytanie
  1. DELETE
  2. FROM tabela
  3. ORDER BY id DESC LIMIT $POLICZ_REKORDY


na datetime ciężej się operuje...
scanner
Od pewnego czasu hołduję zasadzie - nigdy nie kasuj danych z bazy.
Po to te mechanizmy powstały, żeby przechowywać w nich dane.
To w kwestii Twojego kasowania wpisów.

Jeśli koniecznie chcesz kasować lub (lepiej) wybierać wpis sprzed (lepiej: wybierać od) określonej daty, zaraz po ID dodaj pole timestamp. Przy dodawaniu nowego wpisu nadajesz mu wartośc
  1. NOW()
i teraz:
1. Aby usunąć:
  1. DELETE *
  2. FROM foo
  3. WHERE timestamp_field < DATE_SUB( NOW(), INTERVAL 30 DAY )

2. Aby wybrać:
  1. SELECT *
  2. FROM foo
  3. WHERE timestamp_field > DATE_ADD( NOW(), INTERVAL 30 DAY )


Nie potrzeba subselectów...
NIe trzeba niczego liczyć....
Wystarczy wiedzieć, że programowanie to coś więcej niż tylko stukanie w klawiaturę smile.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.