0
특정 스레드에서 마지막 메시지를 가져 오려고하지만 쿼리를 제대로 처리 할 수 없습니다. 특정 스레드에서 마지막 메시지를 가져 오는 것 같지 않습니다.MySQL이 마지막 메시지 가져 오기 (VarChar)
소개
내가 3 테이블 사용 -, 메시지, message_users를 message_threads
모든 메시지
은 (종류의 포럼 및 게시물의 작동 방식처럼?) 특정 스레드에 속하는 사용자가 다수의 사용자를 추가 할 수 있습니다 특정 스레드로, 그래서 여러 사용자가 동일한 스레드에서 서로 메시지를 보낼 수 있습니다.데이터베이스 구조
messages table
id | t_id | u_id | message | time
--------+---------+--------+-----------+--------
1 | 1 | 1 | hello! | timestamp
2 | 1 | 2 | hi! | timestamp
3 | 2 | 1 | testing | timestamp
message_threads
id | author | subject
------+---------+-----------
1 | 1 | Subject 1
2 | 3 | Subject 2
3 | 2 | Subject 3
message_users
id | t_id | u_id | read | nonotice
------+---------+--------+--------+----------
1 | 1 | 1 | 0 | 0
2 | 1 | 2 | 0 | 0
3 | 2 | 1 | 1 | 0
쿼리
이 그 어느 쪽도, 마지막 메시지를 마지막으로 ID를 얻을하지 않습니다를 제외하고는 거의 작동, 내가 사용 쿼리이며, 어떤 아이디어? (예, 보니 이전의 질문에 검색 한이 주제에 관한 질문하지만 어떻게 든 응답에 따라 고정 쿼리를 얻을 수 없습니다)
SELECT
m2.message,
mt.id AS thread_id,
max(m.id) AS message_id,
max(m.time) AS time,
mt.subject
FROM message_users AS mu
LEFT JOIN message_threads AS mt ON mt.id = mu.t_id
LEFT JOIN message AS m ON m.t_id = mt.id
INNER JOIN (
select message as messages_text
from message group by t_id
) AS m2 ON m2.id = m.id
WHERE mu.u_id = 1 AND mu.read = 0 AND mu.nonotice = 0
GROUP BY mt.id
ORDER BY m.id DESC
주셔서 감사합니다, 나는 그것을 내가 집에 가서 우리의 순간을 다할 것입니다, 나는 경우 업데이 트됩니다 당신의 열 이름으로 MySQL의 키워드를 피하려고 그것은 작동합니다. 추가 테이블 정보로 질문을 업데이트했습니다. – user2949138
신난다, 작동한다! 첫 번째 oen은 0.05 초의 결과를 주었고 다른 한개는 0.0009 였으므로 보조 솔루션을 사용하여 나왔습니다. 또한 이름 규칙을 사용할 때 제안 해 주신 것에 대해 감사드립니다. :) – user2949138