我的数据库中有一个数组,即: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);
提前感谢您的帮助。
答案 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
这会给你一个如下列表:
这称为多对多关系。