以下的文章主要說明的是MySQL書架的後台,其中主要包括的有其功能的具體描述,MySQL數據庫的總體設計,MySQL數據庫的實際操作,以下的文章就是對這些相關內容的主要描述。望你浏覽之後會有所收獲。
設計模式之迭代器 Iterator ,寫了一個list類SortedArrayList不知該叫什麼名字,誰有在牆上掛一個MySQL書架的經驗?
功能描述:
這只是項目中的小模塊,項目中有幾個欄目小說 期刊 綜合,每個欄目都有書籍,在sns中,當登錄用戶,看到某本書的時候,可以點擊放入我的書架,選擇放入那個書架,每個書架可以放20本書,每個用戶最多可以建10個書架。對放到書架上的書,可以在我的排序中自動拖動,而在其他的更新排序中按實際時間顯示,用戶不可以改變順序,
數據庫設計:
數據庫主要用來保存放到MySQL書架中書籍的一些信息,封面 描述 地址 等,還有重要的 書架類別字段用一個二維數組實現),每個書架有20個位置可以放書,可以設置一個字段,放書的時候是書的id ,沒放書的就用0來表示,可以用一個二維數組,數組的key 用來放書架的類別,值用來放此類別中的信息,
數據庫的操作:
數據庫操作說明項目都是一樣的CURL基本的操作,具體到本項目中,就是先添加,每個用戶有一個默認數據,就是第一個數組,用戶可以改變書架的名字就是數組的鍵值,對於每一個數組的操作,當加入此書架時,移動位置時 ,下架時,當向書架中添加書籍時還要判斷此書架是否已經放滿沒有位置了,還有就是同一本書不能在一個書架中放入兩次以上。
對於整個字段,就是在添加書架類別的時候,新建一個數組,初始裡面的數組,就是初始一個空書架。當添加書架的時候判斷書架是否以超過最大數目可以在前面頁面根據等級控制用戶可以創建書架的個數);create table bookshelf (uid int(11) ,shelf text);//創建書架表bookshelf
Sql代碼
$arr = array('默認數據'=>'0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0');//插入默認書架的數據,一個數字,key 為書架名字,value為數據上的位置默認為空,
- $text = serialize($arr);//序列化該數組
- insert into bookshelf (uid shelf) values( "$text" ,'$uid');//插入初始化數據
- //添加書架,書架'shelf1' 名字要唯一
- $shelfs=select shelf from bookshelf where uid = '$uid';//查詢出uid 的書架
- $a = unserialize($shelfs);//反序列化MySQL書架得到數組,
- for(int i=0;i<count($a);i++){//判斷此書架是否存在
- if($(a)[0]==shelf1){
- return "此書架以存在";
- }
- return true;
- }
- $p = array('shelf1'=>'0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0');
- $p = serialize($p);//插入新書架
- insert into bookshelf shelf values ('$p') where uid = '$uid';
- //添加書籍 book1 'bid1'到書架shelf1
- $shelfs1 = select shelf from bookshelf where uid = '$uid';//
- $b = unserialize($shelfs1);//
- for(int i=0;i<count($b);i++){
- if($b[i][0]=='$shelf1'){//得到要插入的MySQL書架
- $pk = explode('-','$b[i][1]);
- for(int num=1;num<count($pk[1]);num++){;/書架是否放滿
- if($pk[1][i]==0){
- for(int k=1;k<count($pk);k++){//判斷書架中是否有要插入的書
- if($pk[i][1]=='$bid1'){
- return '此書架已有此時';
- }else{//書架中沒有此書可以插入 默認插入到後面
- if($pk[i][1]==0){
- $pk[i][1]==$bid1;//插入數組
- return implode("-",$pk[i]);//返回字符串
- }
- }else
- return "此書架以放滿";
- }
- //讀取書架 用於在加入書架時顯示的列表 書籍數量 存入一個數組中
- $arr = new array();
- $shlefs = select shelf from bookshelf where uid ='$uid';//
- $ss = unsersize($shelfs);//反序列化MySQL書架信息
- for(int nn=1;nn<count($ss);nn++){//把書架名字做key
- $key =$ss[i][0];
- $value=0;
- $n = explode("-",$ss[i][1]);
- for(int mm=1;mm<count($n);mm++){//得到此書架中的書數量
- if($n[1] !=0){
- $value++;
- }
- $arr[0]=$key;
- $arr[1]=$value;
- }
- //移動書籍 把bid2 從5位置移動到8位置
- $startpos = 2;
- $endpos = 8;
- if($startpos<0 || $startpos>20 || $endpos<0 || $endpos>20 || $startpos==$endpos)exit;
- $shelf = $_db->fetch_first("select * from `sns_shelf` where `uid`={$uid}");
- $shelf select shelf from bookshelf wher uid ='$uid';
- $shelfs=unserisize($shelf);//
- feach($shelfs as $key ,$value){
- $array = explode("-",$value);
- if($array[1] == 'bid2'){找到bid2所在的MySQL書架
- if($sarry[1][$startpos]==0)exit;//如果開始位置沒有書不交換
- $temp = $sarry[1][$endpos];//交換位置
- $sarry[1][$endpos]=$sarry[1][$startpos];
- $sarry[1][$startpos]=$temp;
- $val = implode("-",$value[1]);
- $shelfs[1] = $val;
- serialize($shelfsl);//序列化shelf
- update bookshelf set shelf = shelfs where uid = '$uid';
- 更新
- }
- }
下架書籍