0

元の投稿はほとんど解決されています。最近の質問については、編集 #2 を確認してください

私がやろうとしていることを皆さんが簡単に理解できることを願っています。私は、ユーザーが薬物使用をログに記録できるようにする CakePHP のプロジェクトに取り組んでいます。アルコール、カフェイン、その他何でも構いません。ログを追加するときは、ドロップダウンから物質を選択し、摂取量を入力してから、測定に使用する単位を入力します。

たとえば、ドロップダウンからアルコールを選択し、用量として 12 を入力し、単位として mL を入力できます。

私は、データの構造を改良する方法に取り組んできました。これにより、多くのエントリがある場合に、それらを必要なものに簡単に成形できるようになります。データを使用してユーザー向けのグラフとチャートを生成しますが、それは関係ありません。

このデータを整理する最善の方法を見つけるのに助けが必要です

私の現在の構造はこのようなものです。

マイ テーブル

drugs
id | drug
1  |  Alcohol

records
id | dose | unit | user_id
2  |  12  |  mL  |   3 

record_drugs
id | record_id | drug_id
4  |     2     |    1

これらのテーブルの仲間がいます。はドロップダウンで提供されるすべての利用可能な薬のリストであり、レコードテーブルは、投与量と単位、およびその他のその他のものを保存できる場所であり、record_drugsは基本的にレコードと薬をペアにします。

私が持っているいくつかの問題:

1 . 用途にアルコールの複数の記録があるとしましょう。すべてのアルコール用量を追加し、記録されたアルコールの総量を表示する小さなスクリプトを作成しました。単純な検索(リスト)を実行すると、薬の名前と総投与量を取得できますが、薬に関連付けられている単位を取得できません。foreach ステートメントは 2 つの変数の受け渡しのみをサポートしているように見えるためです。

編集: 詳細情報 私の検索はかなり複雑に見えますが、上記の 3 つのテーブルを調べて 3 つのフィールドを取得します。このように配列で表示されます

array(
'mL' => array(
    'Alcohol' => '12'
),

次に、私の見解では、これらの結果を foreach でループして、このようにデータを表示しようとします。

Alcohol: 12 ml

それをフォーマットして変数をエコーする方法は知っていますが、必要な配列内の 3 つの値を取得して、それらをエコーに入れる方法がわかりません。

2 . 似たような種類の薬をたくさん組み合わせたい場合はどうすればよいですか。たとえば、ビール、ウィスキー、ラムをリストに追加したとします。これらはすべて同じ「カテゴリ」にあり、これらのカテゴリを特定の機能に使用したいと考えています。


私が考えていた解決策は、単位を別のドロップダウンメニューの一部にすることです。そして、薬に関連付けられているユニットは1つだけです。だから私はおそらく私の薬のテーブルを

drugs
id | drug | unit
1  |Alcohol| mL

しかし、それではユーザーが単位を設定するためのカスタマイズの余地がありません。ビールで測定したいのかもしれないし、ショットで測定したいのかもしれません。


編集#2


データベースの正規化に取り組んでいます。結果のレイアウトは次のとおりです

records
id | date | title | user_id
1  | Jan  | Title | 1

units
id | unit
1  | mL
2  | l

drugs
id | drug
1  | Alcohol

record_drugs
record_id | drug_id | unit_id | dose
1         | 1       | 2       | 5

//There is a users table, but it is unrelated, and correctly formatted.

いくつか質問があります。

  1. 上記の最初の 3 つのテーブルの id フィールド。「tablename_id」または「id」という名前にする必要がありますか?

  2. 「タイトル」フィールドは、ユーザーがエントリにタイトルを付けたい場合に入力できるタイトルになります。それは正しい形ですか?

  3. 単位相対値はどのように機能しますか?

時間を割いてこれを読んでくれた人に感謝します。もちろん、私の問題に対する完全な解決策が手渡されるとは思っていません。しかし、私の問題のほんの一部についてヒントや意見を提供していただければ、非常に助かります。

4

1 に答える 1