加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – MySql在一个单元格中存储另一个表的多个引用并选择它?

发布时间:2020-12-13 17:19:21 所属栏目:PHP教程 来源:网络整理
导读:我有两张桌子 table: people id name goods_owned1 john 1,4,32 Mike 2,53 Sam 1,5,24 Andy 5,3,4 – table goods: g_id g_name g_class 1 sugar food 2 salt food 3 boat transp 4 house habitation 5 car transp 这是餐具的简单例子,其实际上非常长并且人
我有两张桌子

table: people 

id name goods_owned
1  john   1,4,3
2  Mike   2,5
3  Sam    1,5,2
4  Andy   5,3,4

table goods:

  g_id g_name  g_class
    1   sugar  food
    2   salt   food
    3   boat   transp
    4   house  habitation
    5   car    transp

这是餐具的简单例子,其实际上非常长并且人们中的每个人可以分配给他的多个商品,例如汽车,船,糖等没有一个人可以拥有多少和它完全随机的限制.我找不到更好的方法来存储它而不是昏迷分离,例如1,3

我有问题做出我需要的选择,例如

SELECT people.*,goods.name
   FROM people
      LEFT JOIN  goods ON goods.g_id = people.goods_owned
         WHERE name = "Sam"

然而问题是goods_owned在单元格中有多个商品ID,他们需要以某种方式分解才能得到答案:

1,Sam,sugar,car,salt

如果您知道在一个单元格中存储(例如100)多个值昏迷的更好的替代方法,请告诉我.

解决方法

一个人可以与零,一个或多个商品相关.
好的可以与零,一个或多个人有关.

那是多对多的关系.

通常,我们通过创建第三个表来处理这个问题,这是一个指向其他两个表的“关系”

table: goods_owned
people_id goods_id
        1        1
        1        4
        1        3
        2        2
        2        5
        3        1
        3        5
        3        2
        4        5
        4        3
        4        4

这两列的组合可以指定为唯一,并可以作为表的主键.每列可以定义为父表的外键.

CREATE TABLE goods_owned
( people_id  INT UNSIGNED NOT NULL,goods_id   INT UNSIGNED NOT NULL,PRIMARY KEY (people_id,goods_id),KEY FK_goods_owned_people (people_id),KEY FK_goods_owned_goods (goods_id),CONSTRAINT FK_goods_owned_people FOREIGN KEY (people_id) REFERENCES people (id),CONSTRAINT FK_goods_owned_goods FOREIGN KEY (goods_id) REFERENCES goods (g_id)
) ;

另一种选择,如果“商品”集是静态且定义良好的,并且不需要在表中表示,那么您可以使用MySQL SET数据类型,并且只有一个表.但是这种方法只适用于集合是静态的(不需要更改).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读