假设我有一个“PRODUCTS
”表,如下所示:
------------------
ID NAME
------------------
1 tomato
2 lettuce
3 bacon
4 bread
5 mayonnaise
6 tuna
------------------
在我的另一张表“PEOPLE
”中,我想将1个人与许多产品联系起来......但我不知道有多少产品。
我一直在做的是将所有ID的产品放在单个字段中,作为数字用空格分隔(3 5 2 6),然后爆炸成数组,然后循环遍历数组并抓取每个带有查询的产品WHERE id = x。
我确信这已经做了很多次(比如Facebook上的一个用户有很多朋友......都有他们自己的ID)。有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
传统方式是通过database normalization。
表:
通过这种方式,您可以拥有多对多的关系。
然后,例如,要获得每个人及其相关产品的完整列表,您可以使用此查询:
SELECT person_name, product_name FROM people_products
INNER JOIN products ON products.id = people_products.product_id
INNER JOIN people ON people.id = people_products.person_id;
答案 1 :(得分:1)
设置一个新的表格,将人员ID与产品ID相关联。
例如表“PeopleProducts”
--------------------------
id peopleId productId
--------------------------
1 3 1
2 3 4
3 2 1
等
然后使用sql join获取与特定人员ID相关联的产品,例如:
SELECT * FROM PeopleProducts LEFT JOIN PRODUCTS ON PRODUCTS.ID = PeopleProducts.productId WHERE PeopleProducts.peopleId = 3