2017-07-09 54 views
-2

如何檢查表格單元是否包含a number (i.e.: 2)並檢索該行?找到號碼時列出行

表水果:

|----|---------|--------| 
| id | type | name | 
|----|---------|--------| 
| 1 | 1,2,3 | Banana | 
| 2 | 2,6,7 | Apple | 
| 3 | 7,10 | Cherry | 
|----|---------|--------| 

例如,在這個表我需要列出的水果,其中含有type2

  • 香蕉

  • 蘋果

如何做到這一點嗎?

+0

您正在使用哪種數據庫系統? – Elyasin

+0

我正在使用mySQL。 – user8201518

+0

https:// stackoverflow。com/questions/4122193/how-to-search-for-rows-containing-a-substring – Elyasin

回答

-1

您可以使用FIND_IN_SET()

SELECT name FROM fruits 
WHERE FIND_IN_SET('2',type) > 0; 

爲了解決您的評論,如文檔中說(下)在這種情況下,您可以考慮使用LIKE運營商或LOCATE()功能。關於絕對錶演時間..以及我沒有對他們進行基準測試。

如果第一個參數包含一個 逗號(,)字符,則此函數無法正常工作。

但請考慮下面的示例,您的type列的值爲3,72,6。在這種情況下,使用like算子將產生該行,即使這是你不想要的,但FIND_IN_SET()不會,因此做SELECT FIND_IN_SET('2','3,72,6');將返回0.

希望現在清除。

+0

是否比'WHERE type LIKE'%value%''更好? – user8201518

+0

@ user8201518,是的,總是......在回答中閱讀鏈接文檔 – Rahul

0

試試這個:

SELECT * 
FROM fruits 
WHERE `type` LIKE '%2%' 

編輯:拉胡爾提到FIND_IN_SET會是一個更好的函數中使用鑑於type是逗號分隔

試試這個:

SELECT * 
FROM fruits 
WHERE FIND_IN_SET('2',`type`) > 0 

我會建議,但是,你讓你的架構如下所示:

fruits      fruit_types 
| id | fruit_name |  | fruit_id | type_id | 
| 1 | Apple  |  | 1  | 2  | 
| 2 | Banana  |  | 1  | 6  | 
| 3 | Cherry  |  | 1  | 7  | 
          | 2  | 1  | 
          | 2  | 2  | 
          | 2  | 3  | 
          | 3  | 7  | 
          | 3  | 10  | 

fruit_types.fruit_id is foreign key for fruits.id 
fruit_id and type_id are in an INDEX 
    (meaning you cannot have duplicate fruit, type records) 

然後,您可以查詢它想:

​​

這樣,就可以避免昂貴的LIKE運營商或FIND_IN_SET功能。應儘可能避免使用字符串與數據庫,以確保最佳性能。