2014-09-29 30 views
0

大家好,作爲主題,我正在尋找替代或高級使用「LIKE」。高級搜索mysql列中由昏迷分隔的一行文字

我有列,其中包含一行字p.e. 「keyword1,keyword2,another_keyword」,當我使用

$sql = mysql_query("SELECT * FROM table WHERE `column` LIKE '%keyword1%' "); 

很難找到它p.e.這個例子的作品,但當我試圖找到較短的字符串它有問題,有時它沒有找到任何東西。

我試圖在昏迷後放置一個空白,它幫助,但如果有一種方法,我可以搜索匹配這個列規範我會很高興。

+0

你爲什麼要創建這類模式的首先。這很糟糕。現在,如果你想高級搜索,然後嘗試使用SOUNDEX功能。在谷歌上搜索並嘗試應用它。 – 2014-09-29 07:08:46

+1

修改數據庫結構,以便每個'關鍵字#'都將作爲單獨的表格與FK分隔到'table'表格(例如'keywords_table'.'column_id') – Justinas 2014-09-29 07:08:49

+0

如果您必須搜索逗號分隔值列比正確的規範化數據庫,然後使用MySQL的[FIND_IN_SET()](http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_find-in-set) – 2014-09-29 07:10:11

回答

0

您可以將關鍵字移動到單個表格中。

或者您可以使用SET字段類型,如果關鍵字列表不更改。

0

存儲逗號分隔的單詞列表是一個糟糕的主意例子,在你的場景中使用像在逗號分隔的列表中很難找到確切的工作,而你可以添加新的表格與你當前的表格相關聯,並將每個單詞存儲在新行與像

table1 
id title 
1 test1 
2 test2 

kewords_table 

table1_id word 
1   word1 
1   word2 
1   word3 

和查詢相關的身份將是

select t.* 
from table1 t 
join kewords_table k 
    on(t.id = k.table1_id) 
    where k.word = 'your_keyword' 

如果你不能改變你的結構,你可以使用find_in_set()

SELECT * FROM table WHERE find_in_set('your_keyword',`column`) > 0 
0

嘗試這樣:

SELECT * FROM tablename 
WHERE column LIKE '%keyword1%' 
OR column LIKE '%keyword2%'; 

更多信息請看這裏:Using SQL LIKE and IN together