выберите оператор для фида сообщений - PullRequest
0 голосов
/ 25 апреля 2011

У меня есть таблица «Сообщения» в базе данных MySQL.Он имеет три столбца: msg_id, user_id, msg_content

Пользователи могут свободно добавлять / удалять сообщения.

Я хочу отобразить фид, который:1. отображать сообщения, упорядоченные по id.2. отображать только 2 сообщения от одного и того же пользователя, если в таблице содержится более 2 сообщений подряд одним и тем же пользователем.3. отображать 10 сообщений одновременно

Например, если у нас есть:msg_id 1, user_id Amsg_id 2, user_id Amsg_id 3, user_id Amsg_id 4, user_id Bmsg_id 5, user_id Cmsg_id 6, user_id Bmsg_id 7, user_id Bmsg_id 8, user_id Bmsg_id 9, user_id Amsg_id 10, user_id Fmsg_id 11, user_id Dmsg_id 12, user_id E...

Фид будет примерно таким:msg_id 1, user_id Amsg_id 2, user_id Amsg_id 4, user_id Bmsg_id 5, user_id Cmsg_id 6, user_id Bmsg_id 7, user_id Bmsg_id 9, user_id Amsg_id 10, user_id Fmsg_id 11, user_id Dmsg_id 12, user_id E

Каков наилучший способ реализации оператора «Выбрать» в фиде mysql?

Спасибо

1 Ответ

2 голосов
/ 25 апреля 2011

Если бы каждый пользователь разместил 100 сообщений подряд, вам нужно было бы получить 500 строк ... Хотя это возможно сделать в хранимой процедуре, гораздо проще с дополнительным столбцом, скажем, «num», подсчитывающим сообщения встрока от того же пользователя.При вставке сообщения с идентификатором пользователя проверьте идентификатор и номер последнего пользователя, который отправил сообщение с:

SELECT user_id, num FROM messages ORDER BY msg_id DESC LIMIT 1

, и вставьте номер + 1, если user_id нового сообщения совпадает с тем, который вы получили по запросу, или вставьте с номером= 1, если нет.Тогда вы можете получить ваш канал с помощью простого запроса:

SELECT * FROM messages WHERE num<=2 LIMIT 10
...