看板 PHP 關於我們 聯絡資訊
※ 引述《derekhsu (斷頭不過碗大疤)》之銘言: : ※ 引述《dinos (守護神)》之銘言: : : 順道問一下,若是 relation 超過 64 種,那 relation 要怎麼處理比較好呢? : : 用 char binary 嗎? : 有一個比較快的方法,直接作第三階正規化把Ralational Table建出來: : 這需要三個Table,例: : 1.PEOPLE 紀錄人員 : [ID], NAME, ..... : 2.RELATION 記錄關係的種類 : [ID], RELATION : 3.RELATION_PEOPLE 紀錄人與人間關係的關聯資料表 : [PEOPLE_ID_SOURCE].[PEOPLE_ID_TARGET],[RELATION_ID] : 建出來的表比較複雜,但其實是比較符合正規化原則,也比較好進行操作的 請問我要找出是同學又是仇人又是鄰居 一次滿足三種條件的所有人 該怎麼進行操作? 正規化目的在減少重複的資料,資料處理的效率常常會隨之下降, 甚至會在正規化完之後,為了效率,把某些特定表格去正規化. 但在這邊用正規化,不僅沒有減少資料量,查詢也不是很方便? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.24.164
knockout:select * from people,relation,relation_people where 07/18 22:48
knockout:people.id = relation.id and relation.relation = 07/18 22:49
knockout:relation_people.relation_id where 07/18 22:50
knockout:relation_people.people_id_target in (查詢的關聯性); 07/18 22:51
knockout:第3行的WHERE打錯了 是 and .. 07/18 22:53
knockout:做正規化的確會增加效率 ~~ select時間以資料筆數愈多 07/18 22:53
knockout:差異愈大 ~ 07/18 22:54
knockout:最後 .. 這是PHP版 ... 不是資料庫版 =_= 07/18 22:55
leosirius:厄樓上的SQL語法跟原po要的答案其實不一樣.. 07/19 10:18
knockout:我怎麼知道他要定義的仇人 鄰居是怎麼定 -.- 07/19 10:32
knockout:反正關聯性都在第三個TABLE ~~ 所以我用in 來做查詢~ 07/19 10:32
knockout:如有誤 ~~ 請更正 ~~ Y 07/19 10:33
leosirius:我意思是IN沒辦法做到原po要的關聯性.. 07/19 11:11
leosirius:我的想法是select出同學、仇人、..然後做intersect 07/19 11:12
knockout:喔 他是說又是仇人 又是鄰居又是同學喔 07/19 11:39
knockout:那要改成 AND relation_people.people_id_target = 1 AND 07/19 11:39
knockout:relation_people.people_id_target = 2 AND 07/19 11:40
knockout:relation_people.people_id_target = 3 07/19 11:40
knockout:呃 我錯了 上面請忽略掉 ~_~" 07/19 11:46