我想寫一個SQL查詢,將在一列中的CSV(或類似的)數組內搜索。下面是一個例子:MySQL命令來搜索CSV(或類似的數組)
插入到屬性中設置 臥室= 1,2,3(或1-3) 標題=很好的特性 價格= 500
我想然後搜索其中臥室= 2 +。這甚至有可能嗎?
我想寫一個SQL查詢,將在一列中的CSV(或類似的)數組內搜索。下面是一個例子:MySQL命令來搜索CSV(或類似的數組)
插入到屬性中設置 臥室= 1,2,3(或1-3) 標題=很好的特性 價格= 500
我想然後搜索其中臥室= 2 +。這甚至有可能嗎?
通常,這不是你應該如何將數據存儲在關係數據庫中。
也許你應該有一個MinBedroom
和MaxBedroom
列。例如:
SELECT * FROM properties WHERE MinBedroom > 1 AND MaxBedroom < 3;
在SQL中處理此問題的正確方法是爲多值屬性添加另一個表。在一個列中存儲多個離散值是違背關係模型的。由於它旨在成爲一個「否」,因此SQL語言對它的支持很少。
在逗號分隔列表中查找給定值的唯一方法是使用正則表達式,這些表達式通常很醜且很慢。你必須處理邊界情況,例如值可能會或可能不在字符串的開始或結尾,以及逗號旁。
SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';
還有其他類型的查詢很容易,當你有一個規範化的表,但很難用逗號分隔的列表。您提供的搜索等於或大於搜索條件的值的示例就是這種情況。另請考慮:
如果你不想創建第二個表,那麼就想出一個方法來用一個值表示你的數據。
更準確的說,我應該說我建議你用一個值代表數據每柱,和Mike Atlas的解決方案完成該操作。
感謝您的徹底迴應!有一件事我應該在問題中更加清楚的是,我真正需要搜索的是一個數字範圍,也就是說,我並不需要知道1到5之間的內容,因爲我知道它會是2 ,3和4. 所以真的問題是,是否存在針對存儲爲1-3的範圍構建某種低/高查詢? – 2009-11-06 19:38:48
只有兩列。 MinBedroom和MaxBedroom。其中MinBedroom> 1 AND MaxBedroom <3。 – 2009-11-06 19:40:27
是的,麥克阿特拉斯+1。這就像當你爲時間範圍設計一個表格時,你有一個「開始」列和一個「完成」列,然後你可以很容易地進行查詢。 – 2009-11-06 19:43:17
對於您對MinBedroom和MaxBedroom列的評論中的建議+1。請將其複製到此答案中! :) – 2009-11-06 19:44:07
謝謝比爾:)編輯包含這個答案。 – 2009-11-06 19:59:23