0

I want to get rooms limited to 20 with last message only order by lastMessage.created_at DESC

message table

     create table tb_message (
            message_id varchar(50) primary key  ,
            room_id varchar(50) not null,
            message_type text not null,
            message text not null,
            sender_id varchar(50) not null,
            recipient_id varchar(50) not null,
            reply_id varchar(50) default null ,
            created_at BIGINT ,
            status integer ,
            constraint tb_message_chat_id_fk foreign key (room_id) references tb_room (room_id),
            constraint tb_message_sender_user_fk foreign key (sender_id) references tb_user (user_id),
            constraint tb_message_recipient_user_fk foreign key (recipient_id) references tb_user (user_id))

rooms table

          create table tb_room (
            room_id  varchar(50) primary key ,
            group_id varchar(50),
            room_type text ,
            owner_id varchar(50) not null ,
            is_muted integer default 0,
             constraint tb_chat_user_id_fk foreign key (owner_id) references tb_user (user_id))   

user table

      create table tb_user (
            user_id varchar(50) primary key ,
            user_name text not null,
            online_status integer )

my query is

      SELECT *
      FROM  (select * from tb_room limit 20) as room
      
      INNER JOIN tb_message 
        ON room.room_id = (select room_id from tb_message   limit 1)  
        
      INNER JOIN tb_user
        ON tb_user.user_id = room.owner_id
      ORDER BY tb_message.created_at DESC 

it return all room with its all messages

Hatem R Saber
  • 187
  • 2
  • 10

0 Answers0