1

私はテーブルdailyとテーブルを持っていますfood。にはfood、私が食べた食品のデータベースを保存していますfood。ではdaily、その日に食べた食品のみを保存し ( から選択しfood、変更して に保存する必要がありますdaily)、1 日の終わりにdailyテーブルを消去します (すべての行は で削除されますDELETE FROM daily)。

私が理解しようとしているのは、テーブルから1行をコピーし、値を変更しながら テーブルfoodにコピーする方法です。daily

foodとのdaily構造は同じです。

食べ物(この表の何も変わらない)

name    calories   grams  fat   protein
---------------------------------------
apple   50         80     1.2   2
potato  90         45     3.4   5
carrot  10         70     6.2   6

毎日(例として93gのリンゴを食べた後のテーブル)

name    calories   grams  fat   protein
---------------------------------------
apple   58.125     93     1.395 2.325

食品データベースにしか存在しない食品を量り、存在しない場合は追加する必要があります。

次に、ドロップダウンから食べ物を選び、その重さをグラム単位で入力します。

リストから を選択しますapple。重さを量るappleと です93g

Myを which yields93gで割ります。(脂肪とタンパク質)のすべての統計を掛けて、テーブルに挿入する必要があります。80g1.1625apple1.1625daily

foodから行を取得し、その中のすべての値を修飾子 ( ) で変更して、テーブル1.1625に挿入するにはどうすればよいですか?daily


選択した食品を配列にロードし、各セルの値を変更してから、その配列を に送り込むことができることに気付きましたdaily

4

2 に答える 2

2

PHP では、行をロードし、値を変更してクエリを作成し、それを に挿入しますdaily。そこには空想は何もないので、SQLでそれを行う方法について尋ねていると思います:

INSERT INTO daily (name,
                   calories,
                   grams,
                   fat,
                   protein)
SELECT name,
       calories * 1.1625,
       grams * 1.1625,
       fat * 1.1625,
       protein * 1.1625
FROM food
WHERE name = "apple"
于 2013-01-04T03:15:53.657 に答える
2

あなたの人生をよりシンプルにするために、あなたのスキーマを少し変更することを提案できますか? あなたが持っているものでは、データは正規化されていません。

毎日のテーブルを変更して、名前用とグラム用の 2 つの列のみを含めるようにします。これは、挿入する必要がある唯一の情報であり、food テーブルの値を変更する必要はありません。

ここで、毎日表示する値を取得するには、次のようにします。

SELECT d.name, d.grams, f.fat*(d.grams/f.grams), f.protein*(d.grams/f.grams) 
FROM daily d, food f
WHERE f.name=d.name;

それが役に立てば幸い

于 2013-01-04T03:16:40.370 に答える