Mysql 如何使用不同表中的用户个人数据从消息表中获取最近的唯一用户列表

Mysql 如何使用不同表中的用户个人数据从消息表中获取最近的唯一用户列表,mysql,Mysql,我有5个表名作为消息、用户、教师、学生和学校(请注意这里的学校指学校管理员) 我正在创建一个简单的消息传递应用程序 学校(即管理员)可以向教师和学生发送信息 教师可以向学校管理员和学生发送信息 学生只能向教师发送信息 我想从特定用户的消息表中获取具有唯一用户详细信息(如姓名、配置文件图片)的最新消息 例如:假设我是学校管理员,我已经向教师A、教师B、学生A、学生B发送了很多消息。我需要一个查询,可以获取我的具有唯一用户的最近消息。像这里一样,它的查询应该返回所有4个用户的id、姓名、个人资料和来

我有5个表名作为消息、用户、教师、学生和学校(请注意这里的学校指学校管理员) 我正在创建一个简单的消息传递应用程序

学校(即管理员)可以向教师和学生发送信息

教师可以向学校管理员和学生发送信息

学生只能向教师发送信息

我想从特定用户的消息表中获取具有唯一用户详细信息(如姓名、配置文件图片)的最新消息

例如:假设我是学校管理员,我已经向教师A、教师B、学生A、学生B发送了很多消息。我需要一个查询,可以获取我的具有唯一用户的最近消息。像这里一样,它的查询应该返回所有4个用户的id、姓名、个人资料和来自学校、教师和学生表的最后一条消息,并相应地返回正确的数据

我在mysql中创建了一个例程,参数为user_id和schu id(即school_id)

消息表

当我运行上述查询时,它将显示如下结果:

在上图中,我得到了错误的数据,名称为admin。我是以管理员身份登录的,它显示的是登录的用户名,而不是另一个用户名。
当我以学校管理员身份登录时,上面的查询显示了正确的数据。但是当我以教师身份登录时,我收到了一条消息,消息中的教师姓名与以学校管理员姓名登录的教师姓名相同。

可以添加示例输出和预期输出。@Rahusingh Okay可以添加示例输出和预期输出。@Rahusingh OK
(SELECT "admin" as type, message.to_user_id, message.from_user_id, message, schools.name,schools.logo as profile FROM `message`
JOIN schools ON message.to_user_id = schools.user_id
WHERE
(message.from_user_id = userid OR message.to_user_id = userid) AND message.school_id = sch_id
GROUP BY message.to_user_id ORDER BY send_date DESC)
UNION
(SELECT "teacher" as type, message.to_user_id, message.from_user_id, message, CONCAT(teachers.firstname,CONCAT(" ",teachers.lastname)) as name, teachers.profile_picture as profile FROM `message`
JOIN teachers ON message.to_user_id = teachers.user_id
WHERE
(message.from_user_id = userid OR message.to_user_id = userid) AND message.school_id = sch_id
 GROUP BY message.to_user_id ORDER BY send_date DESC
)
UNION 
(SELECT "student" as type, message.to_user_id, message.from_user_id, message, CONCAT(students.firstname,CONCAT(" ",students.lastname)) as name, students.picture as profile FROM `message`
JOIN students ON message.to_user_id = students.user_id
WHERE
(message.from_user_id = userid OR message.to_user_id = userid) AND message.school_id = sch_id
GROUP BY message.to_user_id ORDER BY send_date DESC)