mySQL列保存数组

时间:2014-11-11 19:01:10

标签: mysql arrays

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

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

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