2012-05-04 156 views
1

我有一個表單,用戶可以搜索表中的所有條目,並且遇到特定條目的問題。將較長的字符串與較短的字符串匹配

我舉一個例子以便更好地理解:

用戶可以檢查5盒:1,2,3,4,5,他會檢查所有的箱子。

如果特定行的值爲'1 | 2 | 3',我的搜索查詢將無法找到它。

事先我在PHP(這是一個數組)中獲得post變量並在每個值前後添加'%'。在這種情況下: '%1%2%3%4%5%'

我的搜索查詢:

SELECT id FROM table WHERE string LIKE '%1%2%3%4%5%' 

在這種情況下,也不會找到價值「的行1 | 2 | 3' 。 我想這是正常的,它的工作方式很好,但我想執行匹配原始字符串部分的查詢。以我的'%1%2%3%4%5%'來匹配'1 | 2 | 3'。

我該怎麼做?

提前感謝您抽出時間。

編輯:我可以做到這一點沒有多個AND,或運營商?

+0

只是作爲一個旁註:這聽起來像沒有規範化你的數據庫。你應該真的考慮如此:http://en.wikipedia.org/wiki/Database_normalization – oezi

回答

0

只是把它改成這樣:

string LIKE '%1%' 
    OR 
string LIKE '%2%' 
    OR 
string LIKE '%3%' 
    ... 

這將解決您的問題 - 但你真的應該想想normalizing your database(在這種情況下,存儲5個不同的標誌爲1/0的五種不同設置,而不是把它們放在一個領域)。

+0

我沒有在開始時添加單獨的標誌,但我有13個複選框,這將添加13列到我的數據庫。現在我只用一行,用'|'分隔值然後使用php explode來顯示單獨的值。我認爲這會比添加13列更有效率 – changepicture

+0

你應該真的使用單獨的列 - 如果有那麼多的標誌,添加很多列 - 不這樣做會在未來造成很多其他問題,並有單獨的colums將使查詢(特別是複雜的查詢)變得更容易 – oezi

0

在你找到更性感,更有效率,你可以使用:

SELECT id FROM table WHERE string LIKE '%1%' OR string LIKE '%2%' OR string LIKE '%3%' OR string LIKE '%4%' OR string LIKE '%5%' 
+0

謝謝,我想這樣做,但正在尋找一個更簡單和準確的查詢。如果我找不到更好的東西,我會繼續這樣做。 – changepicture

0

我會說 - 不使用像,使用串或一些類似的功能。

+0

我從來沒有使用子字符串,但我會看看它。我對MySQL中更高級的東西相當陌生。謝謝。 – changepicture

相關問題