2017-07-11 15 views
0

私は3つのテーブルを持つデータベースを持っています:レシピ、成分、relation.Whenユーザーは複数の成分を入力すると、それらの成分を含む適切なレシピを返す必要があります。私はユーザーが入力した成分のIDを見つけるPHPコードを書いています。しかし、私はレシピを見つけるためのクエリをさらに書く方法を理解できません。コーディング時には不明な複数の要素があるので、PHPコードで配列を使用する方法を理解できません。 例: 私は2つのレシピTOASTとSANDWICHを持っています パンとバターは両方とも共通していますし、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

パラメータオーバーライドされたクエリを使用している人からStack Overflowに関する質問が表示されるのではないかと思う:-( –

答えて

0

UPD: 次の2つingridientsのIDを持っている:1、2(パン、バターを)

主なアイデアは、あなたの条件に合うとNOT recipiesを見つけることですOther recipiesを選択します。

だから、クエリはそのような何かになります:

SELECT DISTINCT `rid` FROM `relations` WHERE `rid` NOT IN ( SELECT DISTINCT `rid` FROM `relations` WHERE `iid` NOT IN (1,2) );

インナークエリはパンとバター以外ingridientsを持ってrecipiesを返し、外側のクエリは、他のすべてのrecipiesを選択します。

トーストのレシピIDである「1」を返します。

+0

@SeRRglO本当にありがとう、私は実際にSQLクエリを受け取りましたが、配列のすべての値しかし、私はimplode()を使って取得しました。 –

+0

@ Anu.Manoj申し訳ありませんが、誤解されている質問:安全ではないため、implodeを直接クエリに挿入するべきではありません。ドキュメンテーションhttp://php.net/manual/en/mysqli.quickstart.prepared-statements.php良い例があります。 – SeRRgIO

+0

ありがとうございました。 –

関連する問題