我有一个包含3个表的数据库:食谱,配料和关系。当用户输入多种成分时,我需要返回含有这些成分的适当配方。我编写了一个PHP代码,用于查找用户输入的成分的iid。但我无法理解如何进一步编写查询来查找配方。由于有多种成分,在编码时不确定,我无法理解如何在我的PHP代码中使用数组。 例如 我有两个配方TOAST和SANDWICH 我有两种常见的面包和黄油,以及三明治的蔬菜 当我输入面包和黄油作为成分时,如何编写一个只返回TOAST的查询。
if (isset($_REQUEST['search_ingredients']))
{
$q = urldecode(mysqli_real_escape_string($con,$_REQUEST['ingredients']));
$parameter = explode (" ",$q);
$var = 0;
//print_r($parameter);
foreach($parameter as $x)
{
//echo $x;
$sql = "SELECT rname from recipes not in (select distinct rid from relations where iid not ib(SELECT iid FROM ingredients WHERE iname='".$x."'))";
$result = mysqli_query($con,$sql) or exit('{"Data":null,"Message":null,"Code":500}');
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
echo $row['iid'];
$arr_id[$var] = $row['iid'];
//echo $arr_id[$var];
$var++;
}
答案 0 :(得分:0)
<强> UPD:强> 你有两个ingridients的ID:1,2(面包,黄油)
主要想法是找到不符合您条件的收件人,然后选择其他收件人。
所以查询会是这样的:
SELECT DISTINCT `rid` FROM `relations` WHERE `rid` NOT IN (
SELECT DISTINCT `rid` FROM `relations` WHERE `iid` NOT IN (1,2)
);
内部查询将返回除了面包和黄油之外具有防蛀功能的收件人,然后外部查询将选择所有其他收件人。
因此它将返回“1”,这是吐司的食谱ID。