Как я могу получить последние строки из таблицы, основанной на 2 столбцах, и не конфликтовать друг с другом? - PullRequest
0 голосов
/ 26 апреля 2020

Это в основном система личных сообщений для другой системы, которую я создаю. У меня есть таблица, в которой есть идентификатор, передатчик, получатель, сообщение. Передатчик и приемник являются числами.

Текущая система настроена таким образом, чтобы у каждого пользователя был свой уникальный номер. Когда они сообщают другому пользователю, он вставляет его в таблицу. При этом у передатчика и получателя будут оба значения пользователя.

Я хочу показывать пользователю каждый номер, которым он отправил сообщение, и показывать последнее сообщение из их разговора (Все остальное хорошо, как показывать все сообщения от один разговор) будь то от этого пользователя или другого пользователя.

Я знаю, что это не очень хорошо объяснило, поэтому я попытаюсь использовать пример

передатчик, приемник, сообщение

456, 123, Hi!
456, 789, I have a question
456, 789, Can you help?
789, 456, Yes

Итак, в нашем примере у нас есть 123, 456, 789. Для этого у нас будет 456. С нашей стороны мы должны увидеть 123, 789. Самое последнее сообщение для 123 должно быть Привет! и самый последний для 789 должен быть Да. Если бы мы ответили на 789, наше сообщение было бы самым последним или если 123 ответило бы тогда, то это было бы самым последним для разговора 123.

Я надеюсь, что смог объяснить все и надеялся на пример помог.

1 Ответ

0 голосов
/ 26 апреля 2020

A UNION звучит как что-то, что вы найдете полезным:

SELECT * FROM (
    SELECT *
    FROM (
        SELECT *
        FROM `phone_messages`
        WHERE `transmitter` = ###
        ORDER BY `time` DESC
        LIMIT 1
    ) AS `last_sent`

    UNION

    SELECT *
    FROM (
        SELECT *
        FROM `phone_messages`
        WHERE `receiver` = ###
        ORDER BY `time` DESC
        LIMIT 1
    ) AS `last_received`
) AS `last_message`
ORDER BY `time` DESC
LIMIT 1

В первом сегменте вы получите последнее сообщение, отправленное данным лицом, о котором идет речь.

Второй сегмент получит последнее сообщение, полученное идентификатором лица, о котором идет речь.

Внешний выбор дает вам самое последнее из этих двух.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...