[技術討論] 關於 db tables design 問題

有個websites, 用家用來輸入data, 然後gen啲圖表,data summary 出來的
啲data係代表每個channel 的,

而不同users 係只能睇到不同channels的數據
例如user a 睇到channel 1,3,4,5,8
例如user B 睇到channel 5,6,7,10,15,21
咁樣design table 時一下兩種邊種方法比較好

1.
user_perms table
userid, channels-id
sample data
1, "1,3,4,5,8"    <--- 1 係userid, 後面堆數字係這userid 可以access 到邊啲channel
2, "5,6,7,10,15,21"
或者
1,1
1,3
1,4
1,5
1,8
2,5
2,6
2,7
2,10
2,15
2,21


當然詳細channel的資料有另一個table 來store
id, name, channel-desc, raw data


咁當在front-end 時,要select user可以access到邊啲channels時,
以上兩種方法邊個有效率或方便?

方法一,要先get channel list , 然後從string extract 每個channel id, 然後就build where query
例如 where cid=1 or cid=3 or cid=4 or cid=5 or ci=8

cid 是channel table的 id

方法二, 就從user_perm , select 所有該user id 再用cid join channel table id

本帖最後由 7h1r733n 於 2017-1-13 17:22 編輯

我會用方法一 store data
但唔會咁寫句query..

TOP

我會用方法一 store data
但唔會咁寫句query..
7h1r733n 發表於 2017-1-13 16:31



    咁應該點寫句query 最有效select 啲channels ?請指教~~~

TOP

咁應該點寫句query 最有效select 啲channels ?請指教~~~
takayo72 發表於 2017-1-13 17:35

當係mysql...
  1. SELECT channels.*
  2. FROM   channels, users
  3. WHERE  users.id = 1 AND FIND_IN_SET(
  4.        channels.id, users.channels
  5. )
複製代碼

TOP

原來有咁既mysql function. 呢個function有唔版本要求? 例如要邊個版本先提供?

via HKEPC Reader for Android

TOP

原來有咁既mysql function. 呢個function有唔版本要求? 例如要邊個版本先提供?

via HKEPC Reader for Andr ...
takayo72 發表於 2017-1-13 17:51


我記得5.1都有.. 再遠古D就唔知了...

TOP

試過....呢個function真係好方便

via HKEPC Reader for Android

TOP

試過....呢個function真係好方便

via HKEPC Reader for Android
takayo72 發表於 2017-1-13 18:48


其實1同2都係可以... 兩種用有人用...

TOP

本帖最後由 snoopy11hk 於 2017-1-14 15:26 編輯

點解唔咁做呢...
user_perms_table
User      Channel id
1                 5
1                 3
1                 2
2                 3

咁咪最簡單

SELECT *
FROM channels
WHERE channels.id IN (SELECT CHANNEL_ID FROM  user_perms_table WHERE ID = USER_ID)

個人建議唔好 用一個 field 儲多過一個 value

TOP

本帖最後由 7h1r733n 於 2017-1-14 16:07 編輯
點解唔咁做呢...
user_perms_table
User      Channel id
1                 5
1                 3
1     ...
snoopy11hk 發表於 2017-1-14 15:19

方法一.. 要好清楚自己做緊乜...
方法二.. 係flexible一D特別係對將來改動...

最重要係"清楚"自己做緊乜... 都係果句.. 兩種都有人用.. 各有優點....
有時非常時期用非常方法... 我成日一個field store一個json咁點?

TOP

相關文章