各位大大好
小弟有事一問...
目前在寫一個功能,使用Jquery UI中的draggable功能,配和PHP & Mysql 做出拖拉式的行程規劃。
現在卡住的地方是,把東西拉到『行程規劃』那一欄之後,應該是再用Ajax的功能,更新或新增MySql裏的資料表,不過...因為每個人排出來的行程規劃數量,都不一樣...
這樣在儲存『行程規劃』的資料表或整個架構,該怎麼設計...會比較恰當?
因為這問題已經卡了好久,小弟大腦有限,特地上來,請教各位大大...
2013/08/28 太陽哲齡
儲存資料表規劃,大概就長這樣吧:
<pre class="c" name="code">create table 使用者 (
user_id int unsigned not null auto_increment, # 使用者ID
user_name varchar(30) not null, # 使用者姓名
: # 其它欄位
:
primary key(user_id)
);
create table 景點 (
serial_no int unsigned not null auto_increment, # 景點序號
name varchar(100) not null, # 景點名稱
: # 其它欄位
:
primary key(serial_no)
);
create table 行程規劃 (
user_id int unsigned not null, # 使用者ID
serial_no int unsigned not null, # 景點序號
order_no int unsigned not null default 0, # 規劃順序
:
:
primary key(user_id, serial_no)
);
每拖一個過去,就存入[行程規劃]這個 table 即可。
照wiseguy大大說的
如果有10個景點,就將10個景點的序號 都塞入 order_no這個欄位嗎? 還是塞入serial_no 這個欄位呢?
10個景點的序號 逐一塞入serial_no 這個欄位。也就是插入 10 筆的意思。不是把10個景點的序號通通塞到一筆資料去喔。而 order_no 是 1~10 的數字,用來表示這 10 個景點的順序。
U01, 總裁
U02, 賽大
V01,卑南文化公園
V02,台東彩虹55號
V03,32 La Casa Mia
V04,新東糖廠
U01,V02,1
U01,V03,2
U01,V04,3
iT邦幫忙MVPwiseguy提到:
每拖一個過去,就存入[行程規劃]這個 table 即可。
實作上還有一個地方要克服
就是「拉」進行程規劃 table 的時侯
該使用者該行程的所有 order_no 都得重排
iT邦幫忙MVPwiseguy提到:
每拖一個過去
另外還有一個功能上麻煩的事
就是「允不允許使用者從中間加入景點」
例如在第1項和第2項之間加入景點
理論上要允許比較方便
但是程式寫起來就更麻煩了
antijava 兄的疑慮,在這個問題已討論過:
http://ithelp.ithome.com.tw/question/10121467
每拉一筆的儲存動作,只要兩個 SQL 就解決了 (delete all & extended insert)
萬一我要排兩套行程,那就更麻煩了....
謝謝 wiseguy 大大教學,又學會一招了!