0

我正在尝试通过将另一个表中的 id 列到另一个表中一行的特定字段中来连接表。

这就是我想要做的;

表项

Id   Name    Price
 1   Drink   5
 2   Food    3

表格字符

Id   Name   Cash   Inventory 
 1   Foo    10     1
 2   Bar    10     2
 3   Stu    10     1, 2

我正在尝试引用这些项目,以便当我提取有关角色“Stu”的数据时,它会提取与项目“1 和 2”相关的数据,因为他的库存中有这些数据。

我已经阅读了规范化和外键,但无法找到一种方法以我想要的方式将它们联系在一起。我还发现 INT 字段不接受多个逗号分隔的整数。

4

2 回答 2

1

您正在尝试建立一对多的关系。您需要将外键放入表项中,即 CharacterId 。然后您可以使用 JOIN 拉取数据。

于 2012-12-10T05:49:47.227 回答
1

这应该很容易使用 FIND_IN_SET 查看您的表结构这里是解决方案

SELECT 
    * 
FROM `characters` as c
LEFT JOIN items as i on FIND_IN_SET(i.id, c.Inventory)
WHERE c.name= 'Stu'

编辑 :

这是编辑后的解决方案,意味着一条线解决方案。

SELECT 
    c.* ,
    group_concat(i.name) as ItemName,
    group_concat(i.price) as ItemPrices         
FROM `characters` as c
LEFT JOIN items as i on FIND_IN_SET(i.id, c.Inventory)
WHERE c.name= 'Stu'
group by c.name

如果您使用的是 php,您可以使用 php explode 函数分解单元格,然后遍历单元格以访问所有单元格值。

编辑 :

SELECT 
    c.* ,
    group_concat(i.id) as ItemIds,
    group_concat(i.name) as ItemName,
    group_concat(i.price) as ItemPrices         
FROM `characters` as c
LEFT JOIN items as i on FIND_IN_SET(i.id, c.Inventory)
WHERE c.name= 'Stu'
group by c.name 
于 2012-12-10T05:57:25.127 回答