MySQL - Деталь с консультацией

У меня есть база данных так называемое агентство по доставке почты, соразмеренное 3 подмостками

Таблица - пользователи

Здесь сохраняют личную информацию каждого пользователя.

 ______ _________ _________ ________
| idUs | nomUs   | emailUs | codeUs |
 ────── ───────── ───────── ────────
|   1  | Andrey  | g1@d.co | 123456 |
 ────── ───────── ───────── ────────
|   2  | Paola   | g2@d.co | 123456 |
 ────── ───────── ───────── ────────
|   3  | Felipe  | g3@d.co | 123456 |
 ────── ───────── ───────── ────────
|   4  | Daniela | g4@d.co | 123456 |
 ────── ───────── ───────── ────────

Таблица - mensajes_token

Здесь делаются союзы идентификации пользователя, которые беседовали бы.

А именно, что например: 1.2 => Андрей и Паола

 ______ _____________
| idMT | Descripcion |
 ────── ─────────────
|   1  |     1.2     |
 ────── ─────────────
|   2  |     1.3     |
 ────── ─────────────
|   3  |     1.4     |
 ────── ─────────────
|   4  |     2.2     |
 ────── ─────────────

Таблица - сообщения

Здесь регистрируется каждое сообщение, включая Ваш TokenID, чтобы знать кто, с кем он беседует.

 ______ __________ __________ ____________ _____________________ _________
|  id  | usuarioA | usuarioB | mensaje    | date                | TokenID |
 ────── ────────── ────────── ──────────── ───────────────────── ───────── 
|   1  |     1    |     2    |   Hola     | 2017-01-17 02:52:00 |    1    |
 ────── ────────── ────────── ──────────── ───────────────────── ───────── 
|   2  |     2    |     1    |   Hi!      | 2017-01-17 02:53:00 |    1    |
 ────── ────────── ────────── ──────────── ───────────────────── ───────── 
|   3  |     1    |     2    |   Qué más  | 2017-01-17 02:54:00 |    1    |
 ────── ────────── ────────── ──────────── ───────────────────── ───────── 
|   4  |     2    |     1    | Nada, aquí | 2017-01-17 02:55:00 |    1    |
 ────── ────────── ────────── ──────────── ───────────────────── ───────── 

У меня есть следующая консультация:

SELECT 
   TokenID,usuarios.nomUs as destinatario,
   mensaje,
   date
FROM
   mensajes,usuarios
WHERE
   (usuarioA = ? OR usuarioB = ?) AND
   mensajes.usuarioA = usuarios.idUs AND
   usuarios.idUs <> ?
GROUP BY
   TokenID
ORDER BY
   mensajes.date DESC

То, что я хочу с консультацией, состоит в том, чтобы, организовал из-за даты формы потомок, и в том, чтобы не повторился TokenID, как будто говорилось о DISTINCT, но показывая оставшуюся часть колонн. Использование <> - для того, чтобы адресат не был "я" но я всегда буду другим пользователем.

Мой query не функционирует, как я жду, он не повторяет TokenID, но выбирает первое сообщение, а именно. Вместо того, чтобы бросать:

 _________ ________________ ____________ _____________________
| TokenID |  destinatario  |   mensaje  |        date         |
 ───────── ──────────────── ──────────── ─────────────────────
|    1    | Paola Gonzales | Nada, aquí | 2017-01-17 02:55:00 |
 ───────── ──────────────── ──────────── ─────────────────────

Дай как результат:

 _________ ________________ ____________ _____________________
| TokenID |  destinatario  |   mensaje  |        date         |
 ───────── ──────────────── ──────────── ─────────────────────
|    1    | Paola Gonzales |    Hola    | 2017-01-17 02:52:00 |
 ───────── ──────────────── ──────────── ─────────────────────

Я хочу смочь находить так также последние сообщения оставшейся части пользователей. Как я могу решать мою проблему?

5
задан 18.01.2017, 17:58
0 ответов

Как я вижу, в чем ты нуждаешься для последнего полученного сообщения, состоит в том, чтобы консультироваться прямо, как ты говоришь, с order by. однако мы должны иметь в виду, что лучшая форма, чтобы консультировать эти подмостки, - таблица определения, который сделает таблицу, которая помечает ритм или главный, и какова второстепенная.

В этом случае таблица, которая должна быть главной, - таблица сообщений и второстепенной таблица пользователей, откуда только будет взята информация

Чтобы получать определенное одинокое число сообщений это вопрос меняния этого 1 limit на стоимость, в которой ты нуждаешься

SELECT      MEN.tokenId 'TOKENID',
            USU.NOMUS 'DESTINATARIO',
            MEN.MENSAJE 'MENSAJE',
            MEN.DATE 'DATE'
FROM        mensajes  MEN
INNER JOIN  USUARIOS  USU
ON          MEN.USUARIOB = USU.IDUS
WHERE       (USU.IDUS = 1 OR USU.IDUS = 2)
order by    MEN.date desc limit 1
2
ответ дан 03.12.2019, 17:38

Теги

Похожие вопросы