2012-03-28 16 views
0

Ich habe ein Posteingangssystem erstellt. Angemeldete Benutzer können andere angemeldete Benutzer benachrichtigen. Die Tabelle usermessage aus der Datenbank hat zwei Felder 1. userid und 2. messageid. Das Folgende ist ein Auszug aus dieser Tabelle.Mysql und PHP-Posteingang Update

userid | messageid 
12  | 1 
13  | 1 
14  | 2 
15  | 2 
12  | 3 
15  | 3 
12  | 4 
14  | 4 

In obiger Situation, wenn Benutzer '12' Nachricht an Benutzer '13' sendet. Ich möchte, dass die Nachrichten-ID '1' an den unteren Rand der Tabelle verschoben wird, sodass, wenn der Benutzer '12' oder '13' sein Postfach überprüft, die Nachrichten-ID '1' oben im Posteingang als aktuelle Konversation angezeigt werden muss. Bisher konnte ich dies erreichen, indem ich die Nachrichten-ID '1' lösche und als neue Abfrage für jede Benutzer-ID einfüge. Das ist mein Code:

DELETE FROM usermessage WHERE userid = '12' and messageid = '1'; 
INSERT INTO usermessage SET userid = '12', messageid = '1'; 
DELETE FROM usermessage WHERE userid = '13' and messageid = '1'; 
INSERT INTO usermessage SET userid = '13', messageid = '1'; 

Ist es möglich, dies mit einer Abfrage zu erledigen. Bisher konnte ich im Stackflow keine definitive Antwort auf mein Problem finden.

+1

OMG. Haben Sie schon einmal davon gehört, Daten zu normalisieren und ein gutes Design für relative db zu erstellen? – heximal

+0

Dies wäre viel besser mit einem Timestamp-Feld in der Usermessage-Tabelle (mit etwas wie ON UPDATE CURRENT_TIMESTAMP) und einem sinnvolleren ORDER BY auf der Auswahl für die Anzeige des Posteingangs erreicht werden. – cmbuckley

+0

sollte nicht 12 Senden an 13 nur eine neue Zeile erstellen, sollten Sie nicht Nachricht ID zu recyceln. –

Antwort

0

Das Abfragen von Zeilen ohne SORT-Anweisung garantiert nicht, dass sie in der erstellten Zeitreihenfolge sortiert werden. Es ist nur eine Chance, dass MySQL Ihnen ein solches Sortierverhalten gibt.

Es ist also notwendig, dass Sie eine objektive Sortierregel gefunden oder erstellt haben. Dies kann der Zeitstempel der Nachricht oder eine neue Zeitstempelspalte in Ihrer [usermessage] -Tabelle sein.

Es fällt auch auf, dass das Löschen und das erneute Erstellen von Zeilen die MySQL-Prozesskosten beeinflussen, da MySQL die Indizes in der Tabelle [usermessage] jedes Mal aktualisieren muss, wenn Sie löschen und einfügen.

+0

Danke. Timestamp ist eine definitive Antwort. – Hari