2016-01-17 91 views
1

users從表WHERE列包含字符串用逗號分隔值選擇

users 
-------------------------------- 
| user_id | name | hobbies_id | 
-------------------------------- 
| 1 | John | 1,5,8,12,21 | 
| ... 

hobby_id列持有其它表的嗜好的ID - hobbies

hobbies 
----------------------- 
| hobby_id | name | 
----------------------- 
| 1  | painting | 
| 2  | movies | 
| ... 
| 8  | football | 
| ... 

現在我(users表),其中hobbies_id其中之一是1,8,21

所以約翰從te表上面匹配的礦山條件,應包括在輸出。

如果有可能我想通過單個查詢來完成它。 無論如何,我被困在一開始...

SELECT * FROM users WHERE ??

回答

0

這是太長了評論。

通過爲每個名稱和愛好添加一行結點表來修復數據結構。以下是爲什麼不在一個字符串中存儲多個ID的一些原因:

  • 在關係代數中,列傳統上包含一個值。
  • SQL具有很好的列表數據結構。它被稱爲「表格」而不是「列」。
  • 類型很重要。整數應該存儲爲整數而不是字符串。
  • 應該使用外鍵關係強制引用其他表。這些不支持字符串中的事物列表。
  • 由此產生的查詢是不必要的複雜。

瞭解一些名爲「聯結表」的內容。

+0

嗯。這是我沒有意識到的存在的解決方案。謝謝,我會更多地瞭解它。但現在請檢查,如果我正確理解你。假設我有兩個id的** 1和2 **'用戶'和三個'愛好'的id ** ** 1,2,3 **。我的聯結表應該如下所示:'relation_id(int),user_id(int),hobby_id(int)'。幷包含6行inisde:**行1 ** - '1,1,1',**行2 ** - '2,1,2',**行3 **'3,1,3', **行4 ** - '4,2,1',**行5 ** - '5,2,2',**行6 **'6,2,3'-。我的想法是否正確? – RysQ

相關問題