Обновление почтового ящика Mysql и PHP

Я создал систему входящих сообщений. Вошедший пользователь может отправлять сообщения другим вошедшим пользователям. Таблица usermessage из базы данных имеет два поля: 1. userid и 2. messageid. Ниже приводится выдержка из этой таблицы.

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

В приведенной выше ситуации, когда пользователь «12» отправляет сообщение пользователю «13». Я хочу, чтобы идентификатор сообщения «1» перемещался в нижнюю часть таблицы, чтобы, когда пользователь «12» или «13» проверял свой почтовый ящик, идентификатор сообщения «1» должен был отображаться в верхней части папки «Входящие» как недавний разговор. До сих пор мне удавалось добиться этого, удалив идентификатор сообщения «1» и вставив новый запрос для каждого идентификатора пользователя. Это мой код:

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';

Возможно ли сделать это одним запросом. До сих пор я не смог найти определенного ответа в стеке потока, связанного с моей проблемой.


person Hari    schedule 28.03.2012    source источник
comment
МОЙ БОГ. Вы когда-нибудь слышали о нормализации данных и хорошем дизайне относительной базы данных?   -  person heximal    schedule 29.03.2012
comment
Это было бы намного лучше достигнуто с полем временной метки в таблице пользовательских сообщений (используя что-то вроде ON UPDATE CURRENT_TIMESTAMP) и более разумным ORDER BY для выбора для отображения входящих.   -  person cmbuckley    schedule 29.03.2012
comment
не следует отправлять 12 на 13, просто создавая новую строку, вы не должны перерабатывать идентификатор сообщения.   -  person    schedule 29.03.2012
comment
@heximal, как ваши критические комментарии помогут? пожалуйста, будьте более конструктивны. Ссылки, примеры ничего.   -  person dm03514    schedule 29.03.2012
comment
@heximal Хотя я полностью согласен, я ожидаю, что нормальные формы будут намного ниже в списке приоритетов для этого :-)   -  person cmbuckley    schedule 29.03.2012
comment
@hexiaml: спасибо за ответ. Я новичок, и я узнаю больше об этом.   -  person Hari    schedule 29.03.2012
comment
простите, просто я давно не видел ничего подобного. Я попытался сформулировать свой ответ, но не мог решить, что посоветовать автору в качестве отправной точки.   -  person heximal    schedule 29.03.2012
comment
Временная метка @cbuckley выглядит намного лучше. Спасибо.   -  person Hari    schedule 29.03.2012


Ответы (1)


Запрос строк без оператора SORT не дает гарантий, что они будут отсортированы в созданном временном порядке. Это просто шанс, что MySQL теперь дает вам такое поведение сортировки.

Поэтому необходимо, чтобы вы нашли или создали объективное правило сортировки. Это может быть временная метка сообщения или новый столбец временной метки в вашей таблице [usermessage].

Также заметно, что удаление и повторное создание строк повлияет на стоимость процесса MySQL, потому что MySQL будет необходимо обновлять индексы в таблице [usermessage] каждый раз, когда вы удаляете и вставляете.

person Skrol29    schedule 28.03.2012
comment
Спасибо. Отметка времени - это определенный ответ. - person Hari; 29.03.2012