基于成分的多输入搜索

时间:2017-07-11 17:05:32

标签: php mysql

我有一个包含3个表的数据库:食谱,配料和关系。当用户输入多种成分时,我需要返回含有这些成分的适当配方。我编写了一个PHP代码,用于查找用户输入的成分的iid。但我无法理解如何进一步编写查询来查找配方。由于有多种成分,在编码时不确定,我无法理解如何在我的PHP代码中使用数组。 例如 我有两个配方TOAST和SANDWICH 我有两种常见的面包和黄油,以及三明治的蔬菜 当我输入面包和黄油作为成分时,如何编写一个只返回TOAST的查询。

enter image description here

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++;
  }

1 个答案:

答案 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。