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

Php 什么';让一个MySQL行从另一个表访问多个索引的正确方法是什么?,php,mysql,Php,Mysql,假设我有一个“PRODUCTS”表,如下所示: ------------------ ID NAME ------------------ 1 tomato 2 lettuce 3 bacon 4 bread 5 mayonnaise 6 tuna ------------------ 在我的另一张表格“人””中,我想将一个人与许多产品联系起来……但我不知道有多少 我一直在做的是,将该人员的所有产品ID以空格(3 5 2 6)分隔的数字形

假设我有一个“
PRODUCTS
”表,如下所示:

------------------
ID     NAME
------------------
1     tomato
2     lettuce
3     bacon
4     bread
5     mayonnaise
6     tuna
------------------
在我的另一张表格“
人”
”中,我想将一个人与许多产品联系起来……但我不知道有多少

我一直在做的是,将该人员的所有产品ID以空格(3 5 2 6)分隔的数字形式放在一个字段中,然后分解成一个数组,然后在数组中循环并使用ID=x的查询获取每个产品


我相信这已经做过很多次了(比如Facebook上的一个用户有很多朋友……都有自己的ID)。有更好的方法吗?

传统的方法是通过

表:

  • 产品(id、产品名称)
  • 人员(id、人员名称)
  • 人员和产品(id、产品id、人员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; 

设置将人员ID链接到产品ID的新表

例如表“PeopleProducts”

等等

然后使用sql连接获取与特定人员Id关联的产品,例如:

SELECT * FROM PeopleProducts LEFT JOIN PRODUCTS ON PRODUCTS.ID = PeopleProducts.productId WHERE PeopleProducts.peopleId = 3

使用AKA链接表。阅读有关数据库规范化和多对多关系的内容。谢谢…我有一些学习要做。然后你可以写一些查询,比如向10个吃西红柿的人中有5个也吃培根等等的人建议,这将非常有趣。太棒了。谢谢你。
SELECT * FROM PeopleProducts LEFT JOIN PRODUCTS ON PRODUCTS.ID = PeopleProducts.productId WHERE PeopleProducts.peopleId = 3