這種場景參加工作幾個月來,遇到了很幾次了,其中還出現過兩次bug。這次我還想整理下。
假定場景,活動,和門店存在繫結關係,乙個活動可以繫結多個門店。乙個門店也能繫結多個活動。這應該算多對多的關係吧,不過同樣適應。
首先假定,一對多。乙個活動繫結多個門店。
首先是要看資料庫怎麼儲存的,一對多是可以選擇的比如:
活動id為3 繫結門店id為 1,2,3,4,5,6,7 這幾個門店。
可以這麼存,資料庫一條記錄搞定
actid shopid
3 1,2,3,4,5,6,7
或者actid shopid
3 1
3 2
3 7
那麼當我們拿到前台提交的資料應該怎麼處理呢?通常我有兩張方法解決,
一:直接先刪除所有該活動的關係記錄,然後重新插入。這是殘暴型。
二:根據活動id 找出原有的關係,然後進行對比,任何一方為空資料,則表明是要完全insert或者完全delete 若都有資料,判斷資料是否有不同,若相同不處理,若不同,則找出不同部分,然後看不同部分屬於誰?若是屬於資料庫查出來的資料,則說明要刪除,反之則說明要增加。
**:
$id = i('post.id');
$b = i('
post.shopid');
$rela = m('
manageshop_shop
')->where(array('
mid'=>$id))->select
();
if($rela)
}//得出已關聯的門店的id 陣列
//找出ab的不同部分
//先判斷b 是否有值 若沒有全部刪掉 關係表中相關記錄
if(!empty($a) && !empty($b))
else
if(in_array($c[0],$b) && in_array($c[count($c)-1
],$b))
else
}$d->execute($sql);
}else
else
else}}
$tempstr = implode(','
,$temp);
$sql_del = '
delete from `gzsd_manageshop_shop` where mid = \'
'.$id.'
\'and shopid in(
'.$tempstr.')'
; $d->execute($sql_del);
$d->execute($sql_ins);}}
//為空說明選項沒有變化
}else
if(empty($a))
else
}$d->execute($sql);
}else
這裡應該屬於資料庫儲存為,第二種方式。
第一種方式思路也是一樣,只是對字串要處理下,expload一下,就可以了。
二: 多對多的處理,這個其實從我們角度來看也是一對多,只是確定下是從那個物件過來的,是活動繫結門店,還是門店繫結活動,然後再按照方法寫邏輯就好了,他們最終在資料庫的儲存是一樣的,殊途同歸呀。
,也不贅述了。
mybaits的一對多,多對一實現
多對一 乙個老師有5個學生 集合 5個學生關聯乙個老師 關聯 多對一的時候resultmap裡面不用result去一一對應查詢sql的表列和實體類屬性名稱了。多的那一項要用 association 可以理解為乙個物件 方法一 通過子查詢的方法來 思路 先查student資訊,根據查出來student...
資料庫的一對一,一對多,多對多
關聯對映 一對多 多對一 存在最普遍的對映關係,a 表中的一行可以匹配 b 表中的多行,但是 b 表中的一行只能匹配 a 表中的一行。只有當乙個相關列是乙個主鍵或具有唯一約束時,才能建立一對多關係。簡單來講就如球員與球隊的關係 一對多 從球隊角度來說乙個球隊擁有多個球員 即為一對多 多對一 從球員角...
mysql表的一對一 一對多 多對多聯絡
1.資料庫中的多對多關聯關係一般需採用中間表的方式處理,將多對多轉化為兩個一對多。2.通過表的關係,來幫助我們怎樣建表,建幾張表。一對一 一張表的一條記錄一定只能與另外一張表的一條記錄進行對應,反之亦然。學生表 姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯絡人 其中姓名 性別 年齡 身高,體...