如何在SQL行中为每个用户存储未知数量的值

问题描述

我正在使用SQL表存储我的所有用户及其相关信息。每个用户有时可能会有另一个用户发送给他们的消息,而我在弄清楚如何存储这些消息以及将它们与正确的接收用户连接方面遇到困难。

我想过要创建一个名为messages的新表,其中包含所有用户的所有消息,并且每次用户登录时,它将查询并显示与该用户有关的所有消息。但是,我不确定这是否是解决此问题的最佳方法,或者不确定在处理成千上万条消息后它是否会变得很慢。

此方法是否可行,或者有更好的方法来实现此目的?

解决方法

您在用户和消息之间具有1-N关系,因此我建议使用一个单独的表来存储消息,该表将通过外键约束引用发送方和接收方的ID。

DDL看起来像:

create table users (
    user_id int primary key auto_increment,name    varchar(50),...
);

create table messages (
    message_id  int primary key auto_increment,sender_id   int references users(user_id),receiver_id int references users(user_id),title       varchar(200),content     varchar(1000),...
);

现在,您要获取ead用户及其收到的所有消息的详细信息,可以join,如下所示:

select u.*,m.title,m.content,m.sender_id
from users u
inner join messages m on m.reciever_id = u.user_id

您还可以通过user上的另一个联接来获取有关发件人的信息,如下所示:

select u.*,s.name sender_name
from users u
inner join messages m on m.reciever_id = u.user_id
inner join users s on s.user_id = m.reciever_id

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...