2017-07-30 70 views
0

我目前有一個SQL表列出了消息應用程序用戶之間的所有不同對話。該表格包含標題爲participantIDs的列,其中包含會話中每個(兩個)參與方的用戶標識。這些值用逗號分隔,例如19,25表示對話是在用戶19和用戶25之間。在SQL列中存儲'數組'並檢索所有行WHERE某個元素在所述數組中?

現在,我正在嘗試解決如何在用戶查看其郵件收件箱時檢索相關對話。要做到這一點,我希望我將需要使用的代碼行如

SELECT * FROM `convos` WHERE `participantIDs` LIKE (*contains user id*); 

什麼是寫這個查詢的正確方法是什麼?

回答

2

而不是有一列由昏迷分開,我建議你一個簡單的方法,你可以創建一個名爲「Personne」的模式爲(id, idSender, idRecipient, messages),並選擇perssonne 1和perssone 2之間的所有消息b,你可以使用這個請求 select messages from Personne where idSender = '1' and idRecipient = '2';

這樣你會尊重第一範式這裏Normalization of Database

1

闡明這是一個非常,非常糟糕的方式做到這一點。作爲a.slimane說,標準化數據庫...

它的要點是:

select messages from Personne where idSender = '1' and idRecipient = '2'; 

...將會很快,因爲你將創建一個索引(idSender,idRecipient)這將允許通過直接索引查找來查找行。

但是,沒有辦法對「列的一部分包含值」進行搜索。這意味着MySQL將不得不掃描許多行(如果真的堅持,可能是整個表),並且速度會非常慢。

那麼,有一種方法可以在「列的一部分包含值」上進行索引搜索:FULLTEXT。但這不適用於此。

相關問題