2012-02-29 36 views
0

我想在mysql中使用MATCH進行搜索。mysql搜索's'結尾應該返回相同的's'結尾

我有1個表包含「名稱」和「類別」字段。 「類別」字段包含書籍,書籍和書籍。

我想要的是,當我在類別字段中搜索「書籍」或「書籍」時,它應該給我3行。

任何人都可以幫助我嗎?

感謝

我需要澄清這個問題,其實我有一個網站,有搜索欄。當用戶在其上輸入內容時,我的網站應該在類別字段中進行搜索。真正的問題是,有時候用戶輸入「書」,有時候是「書」,有時候是「汽車」,有時是「汽車」。這些單詞後的單詞讓我很頭疼,我知道用戶真正想要的是找到與書或汽車相關的所有內容,那麼,我應該怎麼做,我應該剝離每一個字母?或者有沒有更好的解決方案?

阿里

+0

MySQL支持是沒用的功能,我認爲這是更好如果你在一個單獨的表中存儲類別,建立1:N或N:M關係 – user1027167 2012-02-29 09:52:37

回答

0
select * 
from table 
where category LIKE '%book%' 
+0

thx奇怪:)我想我提出了錯誤的問題。我需要澄清這個問題,其實我有一個網站有搜索字段。當用戶在其上輸入內容時,我的網站應該在類別字段中進行搜索。真正的問題是,有時用戶輸入「書」,有時候是「書」,有時候是「汽車」,有時是「汽車」等。這些單詞後的單詞讓我很頭疼,我知道用戶真正想要的是找到與書或汽車相關的所有內容,那麼,我應該怎麼做,我應該剝離每一個字母?或者有沒有更好的解決方案? – ari 2012-03-01 04:11:42

+0

@ari實際上,請求讀取的是'從表格中選擇所有列,在類別字段中找到單詞'book',無論該單詞前後是什麼,因此如果忽略's',請求將返回相同的結果比用's'寫的 – user544262772 2012-03-01 09:19:17

+0

嗯真的需要檢查一下。 – ari 2012-03-09 09:50:57

0

修剪用戶輸入到一個可以接受的長度,然後嘗試此查詢

$userInput = substr($input, 0, 4); 

    select * from table where category like "%$userInput%" 
+0

thx Naveen :)我想我提出了錯誤的問題。我需要澄清這個問題,其實我有一個網站有搜索字段。當用戶在其上輸入內容時,我的網站應該在類別字段中進行搜索。真正的問題在於,有時用戶輸入「書」,有時是「書」,有時是「汽車」,有時是「汽車」等。這些單詞之後的單詞讓我很頭疼,我知道用戶真正想要的是找到所有與書或汽車有關的,所以,我該怎麼做,我應該剝離每一封信?或者有沒有更好的解決方案? – ari 2012-03-01 04:12:04

+0

將用戶字符串修剪爲可接受的長度,然後根據該字符串 – 2012-03-01 04:22:16

+0

thx naveen進行查詢。我認爲這是更通用的方式。我希望有一個功能,自動知道,當用戶搜索書籍,它也將返回書籍,所以與其他詞像電影,電影,汽車,汽車等 – ari 2012-03-09 09:50:01

0

如果從PHP運行查詢,例如,你可以有準備查詢和然後使用簡單的正則表達式:

<?php 

$term = 'book'; 

if(substr($term,-1) == 's') { //if term ends in an s 
    $term = substr($term,0,-1); //the word without the s 
} 

//TODO: escape $term to prevent SQL injection 

$query = " 
    SELECT * FROM table 
    WHERE category REGEXP '{$term}s?' // s? matches zero or one 's' character 
"; 
+0

THX奇怪:)我想我提出了錯誤的問題。我需要澄清這個問題,其實我有一個網站有搜索字段。當用戶在其上輸入內容時,我的網站應該在類別字段中進行搜索。真正的問題是,有時用戶輸入「書」,有時候是「書本」,有時候是「汽車」,有時是「汽車」等,甚至人們輸入汽車保險或汽車保險等2個字。這些單詞後的單詞讓我很頭疼,我知道用戶真正想要的是找到與書或汽車相關的所有內容,那麼,我應該怎麼做,我應該剝離每一個字母?或者有沒有更好的解決方案? – ari 2012-03-01 04:13:37

0

使用MATCH()進行搜索需要全文索引列類別,這可能是矯枉過正。

如果你真的只是想這兩種情況下,你可以寫

select * from table where 
category = 'book' or category = 'books' 

隨着Oddant的答案,你可能會得到像「probookcover」或任何結果。

如果您希望它不區分大小寫,您有多個選項。

select * from table where 
lower(category) = 'book' or lower(category) = 'books' 

select * from table where 
category like 'book' or category like 'books' 

或者你也可以做

select * from table where 
category like 'book%' 

它讓你與書開始的所有列,但你也可能得到 'bookcover'。

編輯:考慮您的評論:

就像我說的,匹配()是矯枉過正,所以我會做這樣的:

select * from table where 
category = whatYourUserEnters OR category = substring(whatYourUserEnters, 1, length(whatYourUserEnters) - 1) 
+0

thx tombom :)我想我提出了錯誤的問題。我需要澄清這個問題,其實我有一個網站有搜索字段。當用戶在其上輸入內容時,我的網站應該在類別字段中進行搜索。真正的問題在於,有時用戶輸入「書」,有時是「書」,有時是「汽車」,有時是「汽車」等。這些單詞之後的單詞讓我很頭疼,我知道用戶真正想要的是找到所有與書或汽車有關的,所以,我該怎麼做,我應該剝離每一封信?或者有沒有更好的解決方案? – ari 2012-03-01 04:12:33

+0

@ari編輯我的答案。隨意接受爲有用:) – fancyPants 2012-03-01 10:35:36