外鍵關係我是一個MySQL的新手,並正在尋找解決以下問題:Mysql的推導出隨機查詢
我想創建一個CMS與cppcms這應能有模塊。既然我想減少(意外)訪問私人數據的機會,我想要一個處理數據訪問和權限的模塊。由於該模塊應該不知道其他模塊創建的數據結構,因此我希望它通過外鍵推斷出數據所有者的關係。我的想法是搜索將行連接到用戶標識的路徑(通過外鍵)。
綜上所述: 我所試圖做的
- 以隨機查詢,確定受影響的行
- 爲受影響的行確定戀愛關係/路徑(通過外鍵)到用戶/用戶ID(現有表中的列)
- 僅返回可確定關係並滿足條件的行(例如,在相關查詢中找到的用戶ID與固定用戶ID匹配,例如當前正在訪問的用戶系統)
(據我所知的外鍵只執行另一個表中的鍵的存在,但前提我假設是,每一個行鏈接到用戶通過外鍵關係的路徑)
我的問題/問題:
是否有該問題的現有解決方案/更好的方法?編寫的語句不會做伎倆,因爲我不提前知道所有的數據結構/查詢。
如何獲得外鍵關係?除了「SHOW CREATE TABLE」並解析結果字符串之外,還有其他方法嗎?
如何確定會受到影響的行,而無需修改它們?我想通過確定是否可以將它鏈接到當前用戶(不是mysql用戶,但是系統用戶)來過濾此集。
我能嘗試執行查詢,然後選擇影響行,如果我決定訪問衝突根本就回滾?問題在於:如何對合法行的子集進行更改(例如,我試圖更改5行,可能只更改2,如何更改這2行)。一個想法是搜索一種方式來創建一個結果集的臨時表;這個解決方案有幾個缺點:外鍵關係不適合臨時表,它們是'丟失'的。
P.S .:我在C++中編碼,所以我寧願cpp兼容庫的建議,但我打開其他建議。雖然谷歌搜索我偶然發現了教條,Iam正在研究它。 P.P.S:數據庫引擎InnoDB的是(有,因爲外鍵)
UPDATE:第2部分的說明嘗試: 我試圖濾除collumns允許用戶查看錶。爲此,我想通過外鍵在數據庫中找到連接(通過外鍵我確保我可以通過連接獲取所有數據,並且它們是我必須加入的列的提示)。由於我計劃在一個更復雜的系統(例如論壇)上,我不想在臨時表中加入所有數據並對這些數據運行用戶查詢。我寧願評估用戶查詢並檢查結果,如果我可以將它與用戶標識的連接進行映射。例如,我可以使用這個來強制只爲用戶創建的帖子啓用編輯按鈕。 (我知道有更簡單的方法可以做到這一點,但我基本上希望允許程序員編寫自己的查詢,而不必讓他們有機會編輯或查看他們不允許看到的數據。我的假設是程序員不是妖孽,但只是忘記了限制,因此我想用軟件強制它們)。
到達這裏會很不錯,但我有一點複雜的需求。
首先是一個基本的例子。讓我們說,它像Facebook和一個人的所有朋友都可以看到他的照片。
pictures = id **userid** file (bool)visibleForFriends album
friendship = **userid1** **userid2**
users = userid
我希望發生的是:
- 編程輸入 「SELECT * FROM圖片WHERE專輯= 2」
- 系統得到所有匹配的記錄(如IDS的設置)
- 系統看到外鍵用戶ID,嘗試將當前用戶ID與圖片用戶ID匹配,將所有匹配添加到返回的結果部分
- 系統通知特殊個visibleForFriends
- 系統試圖determin所有朋友(SELECT userid1 FROM友誼WHERE userid2 = currentUserID加入(已閱讀了關於聯接)SELECT userid2 FROM友誼WHERE userid1 = currentUserID)
- 系統將所有行,其中visibleForFriends是true和pictures.userid =從5結果。
儘管友誼部分是一些額外的代碼鍵來查看連接。忽略了特殊的友誼情況下(特殊情況下),我希望系統在這方面努力,以及:
pictures = id **albumid** file (bool)visibleForFriends album
albums = id **userid**
users = userid
目前,該系統應該去照片。 albumid ==> albums.id - > albums。 userid ==> users.userid。
我希望這些例子能澄清一下這個問題。一個問題是,從示例中的第一點(程序員查詢輸入),我不想讓「DELETE *」對不屬於用戶的任何東西生效。所以我必須過濾哪些行才能真正刪除。
非常感謝,我會盡快回到我的數據庫。我試圖在我的問題中給出一個例子(從大膽的更新向下) – ted 2011-12-29 19:49:47