SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.03.2020 17:30:15

keysi_
Участник
Зарегистрирован: 18.05.2010
Сообщений: 16

Получить первое сообщения из привязанной таблицы

Есть две таблицы (MySQL):

conversations (переписки):
id
user1_id
user2_id


messages (сообщения):
id
conversation_id
text


Требуется вывести список всех переписок с одним последним сообщением из этой переписки.

Я сделал это на подзапросе:

SELECT *, (SELECT `text` FROM `messages` WHERE `conversation_id` = `conversations`.`id` LIMIT 1) as `message` FROM `conversations`;


Но, вопрос в том, можно ли это как-то сделать не используя подзапрос, а например JOIN'ы?

Неактивен

 

#2 10.03.2020 17:39:23

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить первое сообщения из привязанной таблицы

приведите тестовое наполнение таблиц - и желаемый результат.
и вопрос - а зачем Вам через join'ы если всем устраивает подзапросный вариант?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 10.03.2020 17:59:49

keysi_
Участник
Зарегистрирован: 18.05.2010
Сообщений: 16

Re: Получить первое сообщения из привязанной таблицы

Примерное заполнение:

conversations:
id | user1_id | user2_id
1 | 1 | 2
2 | 1 | 3

messages:
id | conversation_id | text
1 | 1 | msg1
2 | 1 | msg2
3 | 2 | msg3
4 | 2 | msg4

Хочу получить:
id | user1_id | user2_id | text
1 | 1 | 2 | msg1
2 | 1 | 3 | msg3

Причину сложно объяснить, вобщем вопрос спора.

Отредактированно keysi_ (10.03.2020 18:01:39)

Неактивен

 

#4 10.03.2020 20:58:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Получить первое сообщения из привязанной таблицы

>Причину сложно объяснить, вобщем вопрос спора.
Слабый аргумент ;-). Дело в том, что в Вашем случае проще и логичнее использовать Ваш вариант.
Хочется все же услышать доводы - зачем JOIN? Задайте его своему оппоненту, если он настаивает :-).

Ну а если уж так душа просит...

SELECT m.*, c.* FROM `messages` m JOIN conversations c ON m.conversation_id = c.id;


так выбираете "всё". Дальше фильтруйте.
Например, опираясь на https://sqlinfo.ru/articles/info/45.html

Мысль можно продолжить если будет дан вопрос на ответ

>Требуется вывести список всех переписок с одним последним сообщением из этой переписки.
А как определяется "последнесть" сообщения?

Вот Ваш подзапрс
SELECT `text` FROM `messages` WHERE `conversation_id` = `conversations`.`id` LIMIT 1;
 

выбирает не последнее, а любое одно сообщение!


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson