我是编码方面的初学者,尤其是 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/