Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wyświetlać pobraną wiadomość z MySQL tylko raz?
Forum PHP.pl > Forum > PHP
Saki
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.  
CuteOne
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
Saki
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."
damianpsp2000
przecież jak dodasz to pole to utworzy się ono w każdej wiadomości...
radziopoke
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.
kociszp
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ć.
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.