我已经花了一段时间了解MySQL的知识,阅读了教程之类的东西,但是我对事情的运作方式有了一个很好的了解,所以这次我想看看我是否可以自己做,但是我我对一部分感到困惑。

我正在尝试创建一个兴趣表供用户在他们的兴趣之间进行交互。
我对如何为用户存储兴趣信息感到困惑。

user_interests表:

interest_id | interests_names |


如果没有他们在数据库中键入自己的信息,例如运动,生活,嗜好,食物,音乐,游戏等,我如何输入他们要使用的特定兴趣。

我应该在user_interests中为要存储在其中的每个用户ID创建另一列吗?

我迷失在表结构上。

最佳答案

您是否正在寻找这样的东西?

CREATE TABLE users
(
  user_id int not null auto_increment primary key,
  user_name varchar(32)
);
CREATE TABLE interests
(
  interest_id int not null auto_increment primary key,
  interest_name varchar(32)
);
CREATE TABLE user_interests
(
  user_id int not null,
  interest_id int not null,
  foreign key (user_id) references users (user_id),
  foreign key (interest_id) references interests (interest_id)
);


列出所有用户及其兴趣

SELECT user_id, interest_name
  FROM user_interests ui JOIN interests i
    ON ui.interest_id = i.interest_id


获取对“体育”抱有相同兴趣的用户列表

SELECT q.user_id, u.user_name
  FROM
(
  SELECT ui.user_id
    FROM user_interests ui JOIN interests i
      ON ui.interest_id = i.interest_id
   GROUP BY user_id
  HAVING MAX(i.interest_name = 'sports') = 1
) q JOIN users u
    ON q.user_id = u.user_id


这是SQLFiddle演示

07-26 07:23