【问题标题】:How to store list in MYSQL database如何将列表存储在MYSQL数据库中
【发布时间】:2020-05-22 14:07:31
【问题描述】:

我正在创建一个有几张桌子的游戏。

它们如下

用户

user_id 文本

session_id 文本

last_login 日期时间

会话

session_id 文本

用户文本

分类文字

类别

category_id int

类别名称文本


我的主要问题是如何将类别列存储在会话表中。每个会话是一个游戏的实例,类别是用户选择的游戏类别。我想我可以只列出该会话中的 category_ids 吗?我在存储会话中的用户时遇到了同样的问题。

有人可以帮助我更好地做到这一点吗?

谢谢。


编辑:

user_id 将是一个 uuid。例如“bcb4a209-3d90-4fe4-b8ed-594976a7b836”

last_login 是他们最后一次登录的时间,所以是日期和时间

session_id 将是一个 8 个字符的字母数字 ID,例如“9KAN4P2X”

就目前而言,我对用户的想法是用户 ID 列表,例如“bcb4a209-3d90-4fe4-b8ed-594976a7b836, 5a8b0148-f02b-4372-9ff7-781546b5c62d”

category_id 将是一个整数,例如32

category_name 只是一个标识类别的字符串,例如“食物”

categories 将是 category_id 的列表,例如32、42、15

问题是我认为不建议像我为用户和类别建议的那样存储列表,所以我想知道我应该怎么做。

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 在适当的列中,作为格式化文本。 (突出显示并单击{}。)
  • @GordonLinoff 我已经这样做了
  • @jarlh 这真的有必要吗?我相信一切都非常清楚
  • 如果你做得好,你会得到更好的答案,更快。看看minimal reproducible example

标签: mysql sql


【解决方案1】:

如果我没听错的话,您的会话可以匹配多个类别,对吗? 然后创建一个额外的表来存储会话的 id 和类别的 id。 然后对于相同的会话 ID,您将存储与您拥有的类别一样多的行。 然后,您可以使用 JOIN 将会话详细信息与类别详细信息进行匹配。

SESSION_CATEGORY
id    session_id    category_id
-------------------------------
1     1             1
2     1             2
3     1             3

这将是表格的外观:对于会话 1,您将分配类别 1,2 和 3

然后做类似的事情

SELECT * FROM session_category 
    JOIN sessions on session_id=session.id
    JOIN category ON category_id=category.id

(根据您的数据细化查询,只是一个草稿向您解释 JOIN 概念)

【讨论】:

  • 我明白了,这很有道理 - 谢谢。所以我也应该为用户做同样的事情?
  • 可能是的。这个想法是让表来处理一对多的关系
  • 谢谢。这是否意味着我的会话表是多余的并且可以删除?除了可以在 session_category 中找到的 session_id 列表之外,我不确定它会存储什么?
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 2011-03-05
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
相关资源
最近更新 更多