我是一名有关编码,尤其是SQL和PHP的初学者。 我处理应用程序。 120位用户。 用户可以获得应用程序。 300种不同的收藏品。 当用户获取特定项目时,我希望该特定项目的ID号存储在获取它的用户的行中,以便存在关于用户已经拥有哪些项目的一些信息(并避免重复项目)在他的身上)。 有没有一种很好的方法来存储这些信息? 甚至可以将列类型设置为数组并将其存储在那里吗?
请注意:我并不懒惰,我一直在挖掘并寻找答案2个小时。我无法找到解决方案。我知道应该只将一条信息插入一个单元格的规则。
答案 0 :(得分:1)
MySQL不支持存储数组。但是,您可以使用第二个表通过存储用户和项之间的关系来模拟数组。假设您有表users
:
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
...
);
您有一张定义items
的表格:
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.
答案 1 :(得分:0)
我假设您有2个表,例如用户和项目。为了控制哪个用户已经拥有特定项目,我将创建一个关联表,包括来自UserID
的{{1}}和来自users
的{{1}}。这样,如果用户已经拥有此项,您现在可以检查ItemID
表。
这是一个小例子:
用户(UserID为PK):
items
项目(ItemID为PK):
user_items
user_items(+--------+----------+
| UserID | UserName |
+--------+----------+
| 1 | Fred |
| 2 | Joe |
+--------+----------+
引用+---------+----------+
| ItemID | ItemName |
+---------+----------+
| 5 | Book |
| 6 | Computer |
+---------+----------+
,ItemID
引用items.ItemID
):
UserID