порядок по группам по времени не работает - PullRequest
0 голосов
/ 27 февраля 2019

Мой запрос ниже

SELECT *
  FROM
(
SELECT
    usr.*,
    messages.message_text, messages.message_id
FROM
    `user` as usr
LEFT JOIN
    (
    SELECT
        message.*
    FROM
        message AS message
    ORDER BY
        message.updated_at
    DESC
 ) AS messages
ON
`usr`.`user_id` = `messages`.`sender_id` OR `usr`.`user_id` = `messages`.`receiver_id`
WHERE
`usr`.`is_delete` = 0 AND `usr`.`is_active` = 1
ORDER BY
messages.updated_at
DESC
) AS result
GROUP BY
    result.user_id

, если я удаляю группу, тогда она работает хорошо, но я хочу получить результат с группой, пожалуйста, помогите.

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

1 Ответ

0 голосов
/ 27 февраля 2019

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

Вот проблемы в вашем запросе:

  • Вам не нужен подзапрос после LEFT JOIN
  • ORDER BY предложение всегда после GROUP BY
  • Вы должны упомянуть все столбцы, которые вы SELECT вводите в предложении GROUP BY.

Настроил свойзапрос немного:

SELECT *
  FROM
(
    SELECT
        usr.*,
        messages.message_text, messages.message_id, messages.updated_at
    FROM
        user as usr
    LEFT JOIN message messages
        --(
        --  SELECT
        --      message.*
        --  FROM
        --      message AS message
        --  ORDER BY
        --      message.updated_at
        --  DESC
        --) AS messages
    ON
    usr.user_id = messages.sender_id OR usr.user_id = messages.receiver_id
    WHERE
    usr.is_delete = 0 AND usr.is_active = 1
    --ORDER BY
    --messages.updated_at
    --DESC
) AS result
    GROUP BY
    result.user_id,result.name,result.is_delete,result.is_active,result.message_text,result.message_id,updated_at
    ORDER BY
    result.updated_at
    DESC

Надеюсь, это поможет:)

...