J'ai un système de messagerie (PHP/MYSQL) et je l'ai déjà préparé le terrain pour la lecture/non lus dans la table message simplePhp marquer efficacement les messages comme lu
Table
- msgbody
- datetime
- receipent
- read/unread
- sent/unsent (this field is for sending of notification)
J'ai 2 questions
Je comprends lorsque l'utilisateur crée le message que je vais insérer dans la table avec le champ comme non lu, et lorsque je récupère le message la première fois avec la déclaration suivante
MYSQL statement: Select * from table WHERE receipient = "a";
Ce que je fais est que je vais dans le tableau et puis je définir le champ non lu à lire à l'aide des instructions d'insertion multiples (très inefficace!)
est-il que je peux quand même renoncer à la boucle de tableau et mettre à jour le champ quand je le sélectionne?
Et est-ce la bonne façon de déterminer si un message est lu?
2) J'utilise jquery comme frontal, et je peux faire un appel ajax à php, mais je suis toujours curieux de savoir comment je fais, je détermine sur le frontal si l'utilisateur chargé et vu le message ou ne pas.
Quelqu'un peut-il faire la lumière sur la façon dont cela devrait être fait? Ajoute l'appel à mettre à jour pour lire lorsque l'appel Ajax à charger est réussi?
- Ajax appel à mettre à jour lorsque la base de données est lue?
- Ajax appel à mettre à jour ...... quand?
MISE À JOUR: Codes ajoutés. Mon code php pour INSERTION de messages
Avertissement: codes fonctionnent bien. c'est le processus que j'ai besoin d'aide.
$query = $this->db->prepare('INSERT INTO table (msgbody,date time,recipient,read,sent) VALUES(:msg,:date,:user,:read,:sent);
if ($query->execute(array(
':msg' => $msg,
':date' => $datetime,
':user' => $user,
':read' => '0',
':sent' => '0'))) {
return TRUE;
}
My php code for retrieving of message
$query = $this->db->prepare('SELECT * FROM table WHERE recipient = :user);
if ($query->execute(array(
':user' => $user
))){
$data = $query->fetchAll();
foreach ($data as $msg) {
if $msg['read'] == '0';
$this->updateRead($msg['id']);
}
$ this-> Fonction updateRead comprend une table mise à jour de champ lecture à 1, ainsi que l'envoi Pusher au destinataire d'origine afin qu'ils connaissent le message est lu.
Alors, que se passe-t-il si j'ai 1000 messages, je pourrais finir par boucler 1000 fois juste pour marquer 2-3 messages comme Read.
La structure de votre table n'est pas esthétique. – Phiter
Non, il n'y a aucun moyen de combiner un 'SELECT' avec' UPDATE' dans une seule requête. – Barmar
Mais cela ressemble à une situation parfaite pour une préparation et une exécution multiples – RiggsFolly