[php]jakie zapytanie do bazy do czata


(batmomobil) #1

Witam,może mi ktoś pomoże mam problem mam czata,zrobiłem tabelę w bazie,wszystko by było oki rekordy dodaje i wyświetla,ale zawali mi bazę.Jak zrobić zapytanie do bazy aby np:ostatnich rekordów kasowało i wyświetlało np;10.


(Drobok) #2

Ogólnie jeśli chcesz mieć w bazie 10rekordów to podczas dodawania wywal ten z najmniejszym id.

Zakładając, iż masz pola id-inc,treść, user to po prostu robimy insert into tabela values treść/user, a poczym od razu delete from tabela where min(id)


(batmomobil) #3

Witam zrobiłem takie zapytanie,ale limit działa tak,że nie dodaje następnego limitu jako ostatni tylko poprawia istniejące

function czat_dodaj()

{$nick = $_SESSION['nick'];

    $wpis = strip_tags(trim($_POST['wpis']));

    $hour = date('H:i:s');

    $name = $nick;

    mysql_query("INSERT INTO czat VALUES('0','$name','$hour','$wpis');"); mysql_query("DELETE FROM `czat`WHERE id NOT IN (SELECT id FROM (SELECT id FROM `czat` ORDER BY id DESC LIMIT 12 ) foo);");

return ;

}

echo czat();

(Drobok) #4

... o funkcji min nie słyszałeś ?

Jeśli nie chcesz usuwać ostatniego to dajesz po prostu limit 0, 10


(batmomobil) #5

Próbowałem min(id)coś nie działa,a natomiast jak daje limit 0,12 to fakt usuwa od zero do 12 ale nadpisuje nowe rekordy nie jako następny tylko nadpisuje jako już istniejące rekordy.jaki warunek were???


(Drobok) #6

do select, a nie do delete , gdyś jak już wspomniałem

:slight_smile:

ps Where, a were to całkiem co innego ...


(Grzelix) #7

zakładająć że w tabeli czat isntnieje kolumna id z włąściwością autoincrement taki kod wydaje mi się stosunkowo prosty i łatwy do zrozumienia:

()

(batmomobil) #8

(Grzelix) #9

przypadkiem usunąłem piewszy parametr z inserta

przywróć to '0' i pewnie będzie ok


(Drobok) #10

Prócz tego co kazał poprawić sam autor: Daj w nawias id-10 bo łączysz stringa z 10 a nie z wynikiem, spację przed where, oraz dodaj średnik w linijce przed if w stosunku do kodu grzelix'a i będzie ok :slight_smile:

Nie testowałem z return bez wartości, ale raczej nie powinno się tak robić :slight_smile:


(slepcu) #11

tak w ogole to musisz to opierac tylko php i baze ? takie sa ograniczenia twojego hostingu ? bo w sumie po co trzymac to w bazie jak to zaraz i tak bedzie nie aktualne.

w php mam modul memcache, cos co mozna uzyc jako tymczasowej bazy trzymanej w pamieci. jest to zdecydowanie szybsze. po za tym sa jeszcze mechanizmy pokroju socket.io, które poprostu reaguja na wyslanie posta i rozsyłaja go do innych klientow.


(batmomobil) #12

Poprawiłem i dodaje rekordy,ale nadal nie usuwa rekordów poniżej 10.

function czat_dodaj()

        {

            $nick = $_SESSION['nick'];

            $wpis = strip_tags(trim($_POST['wpis']));

            $hour = date('H:i:s');

            $name = $nick;

          mysql_query("INSERT INTO czat VALUES('0','$name','$hour','$wpis');");

            $id = mysql_insert_id(); //ostatni wstawioy rekord

            if($id>10) //istnieje w bazie id >10

              mysql_query("DELETE * FROM `czat` WHERE id< ('. $id-10.') ");

    return ; }

    echo czat();

(Drobok) #13

Ma być tak:

mysql_query("DELETE FROM `czat` WHERE id<".($id-10)." ");

Ew tak:

mysql_query("DELETE FROM `czat` WHERE id<".($id-10));

A to co zrobiłeś ty na pewno nie jest tym o co cię prosiłem :slight_smile:


(batmomobil) #14

Zaczęło działać,tylko mały problem następne rekordy po skończeniu 10 zapisuje od góry i leci w dół,jak to zapisać żeby wyświetlało ostatni dodawany rekord cały czas na dole.Tak wyświetlam:

function czat_wyswietl()

{ $query = mysql_query('SELECT * FROM czat ');

    $czat = '

'; while ($row=mysql_fetch_array($query)) { $czat .= '
'.$row['godzina'].''; $czat .= '('.$row['nazwa'].') ***'.$row['tresc'].''; } $czat .= '

'; return $czat; }[/code] ok już sobie poradziłem poprawiłem zapytanie:

 $query = mysql\_query('SELECT \* FROM czat ORDER by id ');
działa super,bardzo dziękuje za pomoc :-D . Witam wracam do tematu,ponieważ zauważyłem,że czat nie wyświetla się w przeglądarce IE.Kombinuje i nie wiem w czym problem.Czekam na jakąś podpowiedż.Tak wyświetlam:
    

w index.php.