iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
0
Software Development

iOS 從 Objective-c 進化為 Swift 的 30天之旅系列 第 26

[Day 26] Swift SQLite.swift GROUP BY 與 SUM 語法

前言

上一篇我是用原生SQL語法
但回傳的Value格式真的太怪
我裡面明明是Date類型
回傳給我竟然是String
轉Date會報錯
今天就來翻譯回來
SQLite.swift的語法
主要是要把相同產品的價格加總

需翻譯的SQL語法

func reloadData(tableName:String) {
    productList = [ProductItemtMode]()
    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let db = try? Connection("\(path)/Chuhuo.sqlite")
    for user in (try? db?.prepare("SELECT product , price,SUM(price) FROM stock GROUP BY product"))!! {
 
    }
}

翻譯成SQLite.swift語法

先演示全部程式法如下

func reloadData(tableName:String) {
    productList = [ProductItemtMode]()
    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let db = try? Connection("\(path)/Chuhuo.sqlite")
    let query = users.select(price.sum,product)           
                        .group(product)
    for user  in (try? db?.prepare(query))!! {
        print(user[product])
        print(user[price.sum]!)
    }
}

就有的SQL如下

SQL

SELECT product , price,SUM(price) FROM stock GROUP BY product   

翻譯成SQLite如下

SQLite

let query = users.select(price.sum,product)           
                        .group(product)

目前SQL資料以及架構

得出結果就是

[大海螺, 990]
[歐拉, 250]
[美好, 250]

感想就是基本上東西都有
雖然技術文件上有些沒寫
但所有東西都是在變數後面加"." + SQL語法
就有類似的
比如加總 SUM(price) 翻譯就是 price.sum
也是蠻直覺的
加入了Swift語法的基因下去
其他語法可以參考技術文件

let query = users.select(email)           // SELECT "email" FROM "users"
                 .filter(name != nil)     // WHERE "name" IS NOT NULL
                 .order(email.desc, name) // ORDER BY "email" DESC, "name"
                 .limit(5, offset: 1)     // LIMIT 5 OFFSET 1

老實說就是原生語法返回value太奇怪
不然我也是蠻習慣使用原生SQL語法
回傳都是 Binding格式
這到底是什麼
而且我日期欄位格式是 Date
存入也是Date類型
怎麼回傳的時候只能是String
也太奇怪 這可能要花很多時間去找
中文網站太少分享了


上一篇
[Day 25] Swift SQLite.swift 回傳Value Binding 轉換教學(二)
下一篇
[Day 27] Swift Timer 簡易使用介紹
系列文
iOS 從 Objective-c 進化為 Swift 的 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言