2013-05-02 2 views
-2

Пример:SQL запрос, чтобы вернуть последние сообщения

Msg

Я надеюсь, вы понимаете. Я пытаюсь с этим запросом, но он возвращает только те, которые были отправлены пользователем 1. Мне также нужны те, которые были отправлены ему. Но не повторяя тех же участников.

+1

Какие RDBMS (MySQL, SQLServer, Oracle и т.д.) это? –

ответ

0

Try:

SELECT idMsg, idFrom, idTo 
FROM Messages 
WHERE idFrom = 1 OR idTo = 1 
GROUP BY idFrom 
ORDER BY visualized DESC 

+0

Я уже пробовал что-то вроде этого, однако он возвращает все сообщения, которые связаны с пользователем. Я просто хочу последнее сообщение, которое у него было с пользователем. Я пробовал: выберите idFrom, idTo, idMsg из mensagens \t \t \t \t \t \t где idMsg IN (выберите максимальное (idMsg) \t \t \t \t \t \t \t \t \t \t \t \t из mensagens через \t \t \t \t \t \t \t \t \t \t \t \t где idTo = '1' \t \t \t \t \t \t \t \t \t \t \t \t группа по idFrom) \t \t \t \t \t \t \t \t \t \t \t \t ORDER BY dataMsg DESC LIMIT 30 OFFSET 0 Это почти работает, но и precisoq у вернуть отправленное сообщение пользователя 1 пользователь 2 – Jean

0

Я хотел бы попробовать что-то вроде

SELECT MAX(id), idto, idfrom 
FROM messages 
WHERE idto = 1 OR idfrom = 1 
GROUP BY idto, idfrom 

Ее, вероятно, немного больше, чем нужно, но его красивый и четкий.

+0

Это будет повторять пары пользователей, где тот же пользователь находится в различных областях Ид - например, : если у вас есть 'id' 8' idfrom' 6 'idto' 1 и' id' 9 'idfrom' 1' idto' 6, то вы увидите результаты как для 'id' 8, так и для' id' 9. –

+0

Mark Bannister Ты прав. – Jean

0

Try:

select case when idfrom < idto then idfrom else idto end userid1, 
     case when idfrom > idto then idfrom else idto end userid2, 
     max(id) id 
from messages 
where 1 in (idfrom, idto) 
group by 
     case when idfrom < idto then idfrom else idto end, 
     case when idfrom > idto then idfrom else idto end 
+0

Спасибо, очень хорошо ваш код. – Jean

1
SELECT idMsg(Max), idFrom, idTo 
FROM Messages 
WHERE idFrom = 1 OR idTo = 1 
GROUP BY idFrom 
ORDER BY visualized DESC 

или

SELECT top 1 idMsg, idFrom, idTo 
FROM Messages 
WHERE idFrom = 1 OR idTo = 1 
ORDER BY DESC 
0

Запрос:

SELECT m1.idMsg, m1.idFrom, m1.idTo 
FROM Messages m1 
WHERE m1.dataMsg = (SELECT MAX(m2.dataMsg) 
        FROM Messages m2 
        WHERE m2.idFrom = m1.idFrom 
        AND m2.idTo = m1.idTo) 
Смежные вопросы