iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
自我挑戰組

飲食營養追蹤 + 健康分析 Web 系統系列 第 8

改良功能(資料庫)

  • 分享至 

  • xImage
  •  

目的

讓資料庫資料看起來簡潔、不複雜。
同一天同一食物可以累加份量。

1.同一使用者/天/食物/只留下一筆資料
我在設定food_log表的欄位時,將log_id設為主鍵,保證每筆記錄唯一,但id、date、food_id不是主鍵,所以同一使用者、同一天、同一個食物可以新增很多筆資料。詢問gpt後,才知道要把id,date,food_id設合成主鍵,才能達到目的。
設合成主鍵:


  • 在food_log表中先把重複資料刪除
    SELECT id,date,food_id,COUNT(*)AS cnt:從資料表選出這三個欄位,並統一每一組出現次數。
    GROUP BY id,date,food_id:照這三個欄位分組。
    HAVING cnt>1 :只顯示出現次數大於一的(重複出現)。
    https://ithelp.ithome.com.tw/upload/images/20251011/20178845MuS3WLOfzJ.jpg
  • 只留最小log_id
    DELETE FROM food_log WHERE log_id NOT IN():刪除不在(清單)的資料。
    FROM(...)AS keep這裡用了子查詢再包一層的技巧,會先執行()裡的SELECT,把結果暫存一張表keep,最後在DELETE,這樣不會出錯。
    SELECT MIN(log_id) AS log_id:找最小的log_id並把這個欄位暫時取做log_id。
    GROUP BY id,date,food_id照這三個欄位分組。
    https://ithelp.ithome.com.tw/upload/images/20251011/20178845rrDJjL3F3v.jpg
  • 結果
    https://ithelp.ithome.com.tw/upload/images/20251011/20178845952Zq1ETEH.jpg

  • 刪除原本主鍵
    ALTER TABLE food_log MODIFY log_id INT: 修改資料表結構,將欄位log_id屬性改成int,因為AUTO_INCREMENT必須是primary key/UNIQUE,想移除主鍵要修改這個。
    ALTER TABLE food_log DROP PRIMARY KEY:修改資料表結構,移除目前這個表上的主鍵。
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845VqJZfpaN80.jpg
  • 結果
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845y3fYTlh4W5.jpg
    這裡測試到後面發現一定要把log_id這個欄位刪掉不然會出現問題
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845ZBvy2xge0v.jpg
    結果
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845jwVOztXnrk.jpg

  • 新增新主鍵
    這裡我發現我把data設為text類型,而MySQL不允許用text當作主鍵,所以把這欄位改成DATE型態。
    ALTER TABLE food_log MODIFY COLUMN date DATE NOT NULL:修改資料表結構,指定修改欄位是date,改為DATE型態且不能為0。
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845eSOz1HwTI2.jpg
    變為:
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845dTdSIbs6jn.jpg

    開始設新主鍵。
    ALTER TABLE food_log ADD PRIMARY KEY(id,date,food_id):修改資料表結構,將(id,date,foo_id)設為主鍵。
    https://ithelp.ithome.com.tw/upload/images/20251012/201788459VqNvESmbz.jpg

  • 結果
    https://ithelp.ithome.com.tw/upload/images/20251012/20178845dKFjfqKnp4.jpg


上一篇
執行結果+資料庫檢查
下一篇
改良功能(程式碼)
系列文
飲食營養追蹤 + 健康分析 Web 系統16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言