用于保存数组的 mySQL 列

标签 mysql arrays

我是编码方面的初学者,尤其是 SQL 和 PHP。 我处理应用程序。 120 个用户。 用户可以获取应用程序。 300 种不同的收藏品。 当用户获取特定项目时,我希望将该特定项目的 ID 号存储在获取它的用户的行中,以便有一些关于用户已经拥有的项目的信息(并避免重复项目在他的属性(property))。 有没有好的方法来存储这些信息? 甚至可以将列类型设置为数组并将其存储在那里吗?

请注意:我并不懒惰,我一直在四处挖掘并寻找答案 2 小时。我找不到解决办法。我知道一个人应该只将一条信息插入一个单元格的规则。

最佳答案

MySQL 不支持存储数组。但是,您可以使用第二个表通过存储用户和项目之间的关系来模拟数组。假设您有表 users:

CREATE TABLE users (
    user_id SERIAL PRIMARY KEY,
    ...
);

并且您有一个定义项目的表:

CREATE TABLE items (
    item_id SERIAL PRIMARY KEY,
    ...
);

您可以使用类似于 user_items 的表关联用户拥有的项目:

CREATE TABLE user_items (
    id SERIAL PRIMARY KEY,
    user_id BIGINT UNSIGNED NOT NULL,
    item_id BIGINT UNSIGNED NOT NULL,
    ...,
    FOREIGN KEY (user_id)
        REFERENCES users (user_id),
    FOREIGN KEY (item_id)
        REFERENCES items (item_id)
);

然后,要确定用户 123 获得了哪些元素,您可以使用类似于以下的JOIN:

SELECT items.*
FROM users
INNER JOIN user_items
    ON user_items.user_id = users.user_id
INNER JOIN items
    ON items.item_id = user_items.item_id
WHERE users.user_id = 123; -- Or some other condition.

关于用于保存数组的 mySQL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26872445/

相关文章:

php - SELECT GROUP BY 用户发送的 INBOX 消息中的最新条目

php - 为什么这个数据库连接这么慢?

java - 理解 list[i-1] 与 list[i]-1

c - 将整数存储在带有变量的二维数组中

javascript - 将 array.sort 的结果存储在另一个变量中

arrays - 在 golang 中定义一个返回可变大小 slice 的函数

C++ 数组大小 x86 和 x64

mysql - 关系数据库和组合键

php - 如何定期备份MySQL数据库?

mysql - 更新正则表达式 MYSQL