程式中,一對多,多對多,情況下的修改。

2022-03-10 13:19:41 字數 1706 閱讀 7568

這種場景參加工作幾個月來,遇到了很幾次了,其中還出現過兩次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.通過表的關係,來幫助我們怎樣建表,建幾張表。一對一 一張表的一條記錄一定只能與另外一張表的一條記錄進行對應,反之亦然。學生表 姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯絡人 其中姓名 性別 年齡 身高,體...