Вы можете легко получить все сообщения с помощью MySQL-запроса:
SELECT messages.* FROM users
JOIN users_has_messages ON users.id = users_has_messages.users_id
JOIN messages ON users_has_messages.messages_id = messages.id
WHERE users.id = __THE ID OF THE USER__
Просто замените __THE ID OF THE USER__
на идентификатор пользователя, которого вы заинтересованы в получении сообщений.
Способ, которым работает этот запрос, заключается в «объединении» таблиц вместе «на» определенных условиях. Сначала мы присоединяем таблицу users
к таблице users_has_messages
, когда users.id = users_has_messages.users_id
, тогда мы делаем аналогичное «соединение» с таблицей messages
.
Наконец, вы используете инструкцию WHERE
для определения условий. В этом случае нам нужны только пользователи с определенным идентификатором.
Посмотрев на свое последнее изменение, кажется, вы хотите получить все сообщения от от конкретного пользователя. К сожалению, ваша схема не содержит информации о том, кто отправил сообщение. Если вы этого хотите, вам нужно будет добавить send_user_id
в таблицу messages
. Тогда вы могли бы сделать это:
SELECT messages.* FROM users
JOIN users_has_messages ON users.id = users_has_messages.users_id
JOIN messages ON users_has_messages.messages_id = messages.id
WHERE users.id = __THE ID OF THE RECIEVER__
AND messages.send_user_id = __THE ID OF THE SENDER__
Я думаю, что вы имеете в виду «отсортированный», а не «сгруппированный» пользователем, не так ли? – Asenar
Что означает 'user_id' в таблице' users_has_messages'? Откуда вы знаете «от» и «до» для каждого сообщения? У вас больше таблиц или больше полей? –
сгруппирован. Записанный пользователь видит все разговоры, которые у него были. равно в сообщениях facebook –