2016-08-12 4 views
0

私はこれを行うことができないと思っていますが、私は念のために尋ねると思っていました。私はPHPで書かれたレシピアプリを持っています。私は貼り付けられた成分をテキストボックスに変換し、それをmysqlデータベースの行にマッチさせたいと思います。もしあれば、たとえば、私は食材という名前のテーブルを持っていたし、それはテキストの単語をデータベースの文字列にマップする

id  ingredient  calories 
1  bread crumbs 10 
2  egg   15 
3  salt   1 

を含んでおり、

id ingredient 

を含まれている他のテーブルという名前のレシピは、その後のウェブサイトは、食材を入力するテキストファイルを持っていたし、あなたが追加しました:

私は、テキストのうち、「パン粉」を引く recipesテーブルに挿入して、データベース内のパン粉にそれを一致させる、そして卵aを取りたい
1/2 cup bread crumbs 
1 egg 
1 tsp salt 

塩と同じことをしてください。それで私はレシピのカロリーを合計することができました。

私は基本的に、個々のフィールドに入力したり、ドロップダウンメニューから抽出したりすることなく、成分を抽出する最も簡単な方法を見つけようとしています。ドロップダウンメニューには数百の行があり、難しくなります。これは明らかに非常に単純な例であり、実行する必要がある他の多くのものがありますが、抽出部分は私が把握するのに苦労しているものです。何か案は?

+0

人がタイプミスをしたり、必要な順番でデータを入力するとは限らないなど、これをうまくやっているのは非常に難しいでしょう。原料を使ってメニューを使う方がずっといいです。金額など – Barmar

+0

ここにどうやってそれをする必要があるのであれば、それをうまくやることはできません。短い答えで説明できるものではなく、自由形式のテキストを解析するのは人工知能です。 – Barmar

+0

ええと...私はそれが一致することを確認することができるようにテキストを入力するだけでも、成分を入力し、最も簡単な方法を見つけることを試みる。 – 2pourdrummer

答えて

2

このようなクエリを使用して、データベースから原料情報を見つけることができます。

$pdo->prepare("SELECT * 
       FROM ingredients 
       WHERE :input_string LIKE CONCAT('%', ingredient, '%') 
       ORDER BY LENGTH(ingredient) DESC 
       LIMIT 1"); 
$pdo->bindParam(':input_string', $_POST['ingredient']); 
$pdo->execute(); 

ORDER BY LENGTHLIMIT 1それは最長一致を返しますので、彼らはbread crumbsを入力した場合、それは同様breadまたはrumを返しません。

量を解析するのは難しくなります。

+0

"CONCAT"を賢明に使用してカラムヘッダーとゆるやかに比較する場合は+1してください。 OPが求めていることは難しいです。フロントエンドでオートコンプリートを実施し、期待値と完全に一致しない場合には検証/拒否を行う方が良いかもしれません。 – BeetleJuice

関連する問題