- 締切済み
3つのテーブルを使ったデータベース
課題で年齢性別を入力すればカロリーに合った料理名を出すといったものを作らなければいけないのですが、 3つのテーブルから分けてレコードを取得する方法と材料データと料理データをどう結合すれば料理のカロリーがうまくでるかで挫折してます。 初めてたった2か月のド素人ですが、どなたかご指導お願いできないでしょうか。 ソフトはmysql4.1,Apache2,SQLiteManagerを使ってます データベース 必要カロリーデータ 料理データ 材料データ 年齢,性別,カロリー 名前,材料名1,重量1,材料名2,重量2 材料名,カロリー(100g当たり) 埋めれるとこだけ埋めた状況 <?php $con = sqlite_open('../~~~'); /データベースへ接続 $sql = ""; $result = sqlite_query($sql,$con); // クエリを実行 $row = sqlite_num_rows($result); // 取得したレコード件数を変数$rowに格納する for($i=0;$i<$row;$i++) { //取得したレコード件数まで繰り返す $array = sqlite_fetch_array($result); $seibetu=$array[0] $nenrei=$array[1] $sex=$_REQUEST['sex']; $tosi=$_REQUEST['nenrei']; if($array[0]==$sex and $array[1]==$tosi ){ //検索条件式 <html> <head> <title>カロリー表示</title> </head> <body> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <form action="a.php" method="post"> <p> 年齢:<input type="text" name="nenrei" style="ime-mode : disabled;"><br> 性別:<input type="radio" name="sex" value="man">男 <input type="radio" name="sex" value="woman">女<br> </p> </form> </body> </html>
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- hanabutako
- ベストアンサー率54% (492/895)
まず、料理データを正規化しましょう。 料理table 料理名, 料理ID 料理材料table 料理ID, 材料名, 分量(100g単位) こうすると、料理材料tableと材料データをjoinして、料理IDでgroup byしたうえで分量 * カロリーのsumをとれば、料理ごとのカロリーが計算できます。 また、年齢・性別に対応したカロリー量は必要カロリーデータからselectとwhereで取り出せます。 あとは先のカロリー計算をさらに絞り込むだけです。 SQLが苦手だったらこれに相当する計算をPHPで書けばいいのですが、せっかくMySQL使っているのにもったいないという感じがします。多分、ちゃんとインデックスを張っておけばMySQLを使ったほうがはるかに速いです。 テーブルの変更が不可ということだったら、地道に材料名1、材料名2について材料データからカロリーを取ってきて重量と掛け合わせるというプログラムを書くしかないですね。そして計算されたカロリーを年齢・性別に対応したカロリーに匹敵するかを毎回比較し、合格したものだけ配列などに入れておくとよいでしょう。 個人的には、材料の数が増えた時に対応できず、プログラム自体もPHPで全て書いてあるため低速にしか動かないので、このやり方は悪いやり方にしか見えませんが... というわけで、可能なら料理データを正規化しましょう。話はそこからです。
お礼
返答ありがとうございます phpでなんとかしようとがんばってたので助かりました