PHP MySQL选择数组中的数组

时间:2013-10-04 23:26:45

标签: php mysql arrays

我的数据库中有一个数组,即:id_ingredients =“1,8,3,9,5,2,7,4”

如果字段ID中存在任何变量id,我想比较一个也是数组的变量来给出结果。

我正在检查产品的成分是否包含变量中的任何成分。如果有人对坚果过敏,例如我想要所有含有任何坚果的产品。所以我查询我的成分,以获得其名称中包含“坚果”一词的任何成分的ID。然后我需要使用任何成分ID来获得产品。

这就是我的......

$alg = $_POST['alg'];

mysql_select_db($database, $Products);
$query_availIngredients = "SELECT * FROM ingredients WHERE ingredient LIKE '%$alg%' ";
$availIngredients = mysql_query($query_availIngredients, $Products) or die(mysql_error());
$row_availIngredients = mysql_fetch_assoc($availIngredients);

$ingarray = array(); 

    do{
         $ingarray[] = $row_availIngredients['id'];

    } while ($row_availIngredients = mysql_fetch_assoc($availIngredients));

$alg = implode (',', $ingarray);


mysql_select_db($database, $Products);
$query_Products = "SELECT *FROM products  WHERE 
 id_ingredients LIKE '%$alg%' " ;
$Products = mysql_query($query_Products, $Products) or die(mysql_error());
$row_Products = mysql_fetch_assoc($Products);

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

将ID数组放在单个数据库字段中并不是一个好主意,并且通过这种方式设计数据库会损失关系数据库为您提供的一些功能。

不是在产品表中存储成分ID数组,而是创建第三个表。

示例表模式如下:

Products
  id
  productName
  productDescription
Ingredients
  id
  ingredientName
ProductIngredients
  id
  id_Products
  id_Ingredients

某些示例数据可能如下所示:

Products
id           productName                            productDescription
1            Peanutbutter And Jelly Sandwich        Best sandwich ever
Ingredients
id           ingredientName
1            Peanutbutter
2            Jelly
3            Special sauce
4            Bread
ProductIngredients
id           id_Products             id_Ingredients
1            1                       1
2            1                       2
3            1                       4

然后,您可以获得包含“坚果”一词的成分ID列表,如下所示:

SELECT id FROM Ingredients WHERE ingredientName LIKE '%nut%'

包含含有'坚果'一词的成分的产品清单如下:

SELECT
  Products.productName
FROM
  Products
  LEFT JOIN ProductIngredients ON ProductIngredients.id_Products = Products.id
  LEFT JOIN Ingredients ON Ingredients.id = ProductIngredients.id_Ingredients
WHERE
  Ingredients.ingredientName LIKE '%nut%'

您可以获得这样的产品的成分列表:

SELECT
  Ingredients.ingredientName
FROM
  Ingredients
  LEFT JOIN ProductIngredients ON ProductIngredients.id_Ingredients = Ingredients.id
WHERE
  ProductIngredients.id_Products = 1

这会给你一个如下列表:

  • 花生酱
  • 果冻
  • 面包

修改

这称为多对多关系。