让一个MySQL行从另一个表访问许多索引的正确方法是什么?

时间:2014-01-22 06:10:05

标签: php mysql

假设我有一个“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)。有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

传统方式是通过database normalization

表:

  • 产品(id,product_name)
  • 人(id,person_name)
  • people_products(id,product_id,person_id)

通过这种方式,您可以拥有多对多的关系。

然后,例如,要获得每个人及其相关产品的完整列表,您可以使用此查询:

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