Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak wyświetlać pobraną wiadomość z MySQL tylko raz?
Saki
post
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

Ostrzeżenie: (0%)
-----


Witam, chciałbym zrobić na jednej stronie, aby wiadomości pisane przez użytkowników były na tej stronie wyświetlane tylko raz, jeżeli użytkownik odświeży stronę już nie zobaczy tej wiadomości tylko nowe, a jak szybko odświeża i nikt nic nie napisze to strona pozostaje pusta aż ktoś coś nowego napiszę.

Przykład: user dodaje nową wiadomość (jest zapisywana w mysql) -> user wchodzi na stronę i widzi nowe wiadomości pobrane z mysql -> jeżeli nikt nic nowego nie napisał i odświeża stronę to ma pustą stronę.

To ma działać dla każdej osoby, jeżeli jedna osoba z chin odświeżyła stronę i nie ma nowych wiadomości to ma pokazywać pustą stronę, ale jeżeli ktoś z niemiec odświeża stronę na której długo nie był to dostaje wszystkie nieprzeczytane wiadomości. Jak coś takiego zrobić?

Do mysql nie wolno nic dopisywać, że przeczytana wiadomość została, bo wiadomości może być kilka miliardów.
Myślałem o session, w sessji będzie się zapisywać ostatni wyświetlony od wiadomości, co w na to? Może macie jakiś lepszy pomysł? smile.gif

Jak wykonać polecenie: Wyświetl wszystkie wiadomości z mysql które mają większe ID od $_SESSION['lastReadId']?

Chyba mam, dobrze, czy da się jeszcze lepiej? Chodzi mi aby ten skrypt działał perfekcyjnie.
  1.  
  2. // FIXME Dobra to nie działa, jak mogę to naprawić?
  3. $lastReadId = $_SESSION['lastReadId'];
  4. $getq = $db->query('SELECT * FROM (SELECT * FROM shoutbox WHERE `bad` = 0 AND id >'.$lastReadId.' ORDER BY id DESC LIMIT 15) t ORDER BY id ASC;');
  5.  
  6.  
  7. foreach($getq as $row)
  8. {
  9. ekipa($row['time'], $row['nick'], $row['tresc'], $row['rola'], $row['user_id']);
  10. $_SESSION['lastReadId'] = $row['id'];
  11. }
  12.  
  13.  


Ten post edytował Saki 17.08.2012, 06:21:37


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CuteOne
post
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%)
-----


Dodaj kolumne np. read(tinyint), która będzie mówiła czy wiadomość została przeczytana czy nie. Gdy ktoś doda wiadomość ustaw read na 0 a po jej wyświetleniu update z 0 na 1. Oczywiście wyświetlasz tylko te wiadomości, które mają read = 0
Go to the top of the page
+Quote Post
Saki
post
Post #3





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

Ostrzeżenie: (0%)
-----


Cytat(CuteOne @ 17.08.2012, 07:59:54 ) *
Dodaj kolumne np. read(tinyint), która będzie mówiła czy wiadomość została przeczytana czy nie. Gdy ktoś doda wiadomość ustaw read na 0 a po jej wyświetleniu update z 0 na 1. Oczywiście wyświetlasz tylko te wiadomości, które mają read = 0


Napisałem przecież że to nie może być!
Jak mam to zrobić proszę bardzo jak jest tysiące użytkowników a jedna wiadomość?!
Bo jeżeli zrobię tak jak ty piszesz to pokaże wiadomość pierwszemu użytkownikowi który wejdzie na stronę a nie reszcie, co to ma być?exclamation.gif

"Do mysql nie wolno nic dopisywać, że przeczytana wiadomość została, bo wiadomości może być kilka miliardów."

Ten post edytował Saki 17.08.2012, 13:38:10


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
damianpsp2000
post
Post #4





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 10.07.2012

Ostrzeżenie: (0%)
-----


przecież jak dodasz to pole to utworzy się ono w każdej wiadomości...
Go to the top of the page
+Quote Post
radziopoke
post
Post #5





Grupa: Zarejestrowani
Postów: 125
Pomógł: 14
Dołączył: 2.06.2010

Ostrzeżenie: (0%)
-----


Ja bym powiedział bardziej byś stworzył kolumnę idmessage w tabeli użytkowników i gdy odczytujesz wiadomości sprawdzasz jakie jest to id i wypisujesz tylko wiadomości z większym id z tabeli z wiadomościami, a idmessage update-ujesz do największej wartości z id w tabeli z wiadomościami.

Ten post edytował radziopoke 17.08.2012, 13:51:48
Go to the top of the page
+Quote Post
kociszp
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.08.2009

Ostrzeżenie: (0%)
-----


Zrób tak że przy wiadomości utwórz jakieś pole (może być read) z pierwotną wartością 0. Gdy jakiś użytkownik przeczyta tą wiadomość dopisuj tam jego id użytkownika po przecinku.

A potem tylko zrobić dobrą filtracje po tworzącej się liście w polu read i będzie śmigać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:04