2011-09-17 68 views
0

這個問題聽起來很容易,但我找不到錯誤: 我的PHP腳本發佈文本到MySQL數據庫。這由用戶管理系統支持。所以只有發佈文字的用戶才能看到它。現在我想整合一個「分享功能」。用戶a使用戶b能夠在他的文本概覽中看到用戶的帖子之一(有點像筆記共享功能)。MySQL內部會話檢查?

在與用戶b分享一個筆記後,他可以在他的概述中看到筆記,但是在打開筆記以查看筆記無法使用的詳細信息時。

在技術方面我有3個表:
1)注意事項 - 與字段標題,文本和用戶
2)用戶 - ID,名稱和密碼
3)邀請 - NoteID,接下來fromID和TOID

我的邀請概述SQL語句(這是工作):

SELECT * FROM notes a, invites b WHERE (b.toID = '$UserID') AND (b.ItemID = a.id) AND a.Deleted = 0 

但是,當我有這個說法

SELECT * FROM notes a, invites b WHERE (a.id = '$ItemID') AND ((a.User = '$username') OR (b.toID = '$userid')) 

在詳細視圖中它不工作。即使我有這個非常簡單的(和不安全)SQL它不工作:

SELECT * FROM notes WHERE ID = '$ItemID' 

我真的絕望了,我唯一的解釋(這是非常不現實的)是MySQL有一種內部安全檢查其確實的不允許顯示來自陌生人的內容:S

有什麼想法?非常感謝

+0

是什麼項目ID和NoteID的區別? –

回答

1

我不確定這是你唯一的問題,但是你偶然發生了交叉連接。 MySQL可能會嘗試在結果集中創建大量的行,然後超時。使用JOIN ... ON ...語法來幫助你記住,指定要如何執行聯接:

SELECT * 
FROM notes a 
JOIN invites b 
ON ... -- put some join condition here 
WHERE (a.id = '$ItemID') AND ((a.User = '$username') OR (b.toID = '$userid')) 

我猜,你想是這樣的:

ON b.NoteID = a.ID