2011-03-20 64 views
1

另外,如果這不是正確的地方,那麼我會將它移動到堆棧溢出。我在這裏發佈了它,因爲當我在那裏有一個關於mysql的問題時,他們說這是應該問這樣的問題的地方。當使用提供的ID時,mysql選擇與外鍵連接

我遇到的問題是我的聊天系統。我有一個正常的聊天表,然後我也有用於私人消息。因此,私人消息聊天表僅包含私人消息ID,也包含應該接收它的人。

表模式是這樣的。

chat(
id int unsigned not null, 
sayer_id int unsigned not null, 
message_type tinyint unsigned not null, 
message varchar(150) not null, 
timesent timestamp on update current_timestamp, 
); 

索引在id和timesent上。主要是id,也是timesent上的正常索引。 第二個表是剛剛。

chat_private(
message_id int unsigned not null, 
target_id int unsigned not null 
) 

主要是在消息ID上,也是一個外鍵。目標ID目前沒有一個,但我可以把正常的索引。

現在,我試圖做的查詢就像SELECT message, timesent FROM chat WHERE timesent>=last_update AND target_id=$userid; last_update是一個會話變量,指出上次執行更新的時間。 $ userid是服務器端會話變量的ID。 另外我不知道如何輕鬆地做類似的事情,因爲我想從chat_private表中加入它,但我也不想處理所有的id,因爲它只是持有target_id/message_id,因此將毫無意義。

使用數據的最簡單方法是什麼?如果無法使用,那麼我只需將私人聊天和其他後續聊天移動到他們自己的表格中,並相應地調整數據大小。

+1

有關管理DB服務器問題屬於這裏。有關數據庫設計/編程的問題屬於Stack Overflow。關於非常專業的數據庫管理員的問題屬於..以及我忘記它的名字,但也有一個專業的DBA堆棧交換站點。希望有助於超過它的混淆! – 2011-03-20 11:57:34

+0

好吧,我不知道該把它放在哪裏,因爲我插入緩慢,因此...我不知道這是堆棧還是本站問題。我將來一定會牢記這一點。 – 133794m3r 2011-03-20 22:42:41

回答

1

你想要的東西像

SELECT chat.message, chat.timesent FROM chat LEFT JOIN chat_private ON chat.id=chat_private.message_id WHERE chat.timesent>='$timestamp' AND chat_private.target_id=$target_id 
+0

如果有效,那麼我很樂意使用它。我目前對連接並不熟悉,因此我不確定如何解決所有問題。看起來它會起作用,因爲它是,我將來可以參考它。如果我有足夠的聲望,我會贊成它,但因爲我不我不能。 – 133794m3r 2011-03-20 11:20:47