Re: [請益] 有點複雜的問題(內詳)

看板PHP作者 (找尋蔚藍天空)時間18年前 (2007/07/18 20:26), 編輯推噓5(5014)
留言19則, 2人參與, 最新討論串6/6 (看更多)
※ 引述《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

07/18 22:48, , 1F
select * from people,relation,relation_people where
07/18 22:48, 1F

07/18 22:49, , 2F
people.id = relation.id and relation.relation =
07/18 22:49, 2F

07/18 22:50, , 3F
relation_people.relation_id where
07/18 22:50, 3F

07/18 22:51, , 4F
relation_people.people_id_target in (查詢的關聯性);
07/18 22:51, 4F

07/18 22:53, , 5F
第3行的WHERE打錯了 是 and ..
07/18 22:53, 5F

07/18 22:53, , 6F
做正規化的確會增加效率 ~~ select時間以資料筆數愈多
07/18 22:53, 6F

07/18 22:54, , 7F
差異愈大 ~
07/18 22:54, 7F

07/18 22:55, , 8F
最後 .. 這是PHP版 ... 不是資料庫版 =_=
07/18 22:55, 8F

07/19 10:18, , 9F
厄樓上的SQL語法跟原po要的答案其實不一樣..
07/19 10:18, 9F

07/19 10:32, , 10F
我怎麼知道他要定義的仇人 鄰居是怎麼定 -.-
07/19 10:32, 10F

07/19 10:32, , 11F
反正關聯性都在第三個TABLE ~~ 所以我用in 來做查詢~
07/19 10:32, 11F

07/19 10:33, , 12F
如有誤 ~~ 請更正 ~~ Y
07/19 10:33, 12F

07/19 11:11, , 13F
我意思是IN沒辦法做到原po要的關聯性..
07/19 11:11, 13F

07/19 11:12, , 14F
我的想法是select出同學、仇人、..然後做intersect
07/19 11:12, 14F

07/19 11:39, , 15F
喔 他是說又是仇人 又是鄰居又是同學喔
07/19 11:39, 15F

07/19 11:39, , 16F
那要改成 AND relation_people.people_id_target = 1 AND
07/19 11:39, 16F

07/19 11:40, , 17F
relation_people.people_id_target = 2 AND
07/19 11:40, 17F

07/19 11:40, , 18F
relation_people.people_id_target = 3
07/19 11:40, 18F

07/19 11:46, , 19F
呃 我錯了 上面請忽略掉 ~_~"
07/19 11:46, 19F
文章代碼(AID): #16dWSFwv (PHP)
文章代碼(AID): #16dWSFwv (PHP)