2013-08-20 69 views
1

當我將$file_name_keyword設置爲鋼鐵俠3時,它也將鋼鐵俠2的結果返回給我,反之亦然,它甚至不是問題,但如何使它返回第一順序的所有鋼鐵俠3條目和那麼鋼鐵俠2? 請注意ORDER BY票 - 票被設置爲0,現在所有條目都相同。Mysql搜索匹配和訂單

SELECT *,MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
FROM `uploaded` 
WHERE (MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
     OR file_name_keyword REGEXP '.*($file_name_keyword).*') 
AND active = '1' 
ORDER BY `votes` 

返回我像

Iron.Man.2. Multi5.PAL.Nintendo.DS .By.Gamolama.torrent 
Iron.Man.3.2013.720p.BluRay.x264.YIFY.mp4 
Iron Man 2 Multi5 PAL Nintendo DS By Gamolama torrent 
Iron Man 3 2013 720p BluRay x264 YIFY mp4 
Iron Man 2 2010 1080p BDRip AAC x264-tomcat12 torrent 
iron man 2 wallpaper-1920x1080 jpg 

在此先感謝,這是我結束了和不知道如何改進它。

表結構[MyISAM數據]所有的

id - int(11) 
file_name - varchar(255) - server generated 
file_size - int(11) 
file_ext - varchar(255) 
file_name_keyword - varchar(255) - user generated e.g. original file name 
upload_datetime - datetime 
votes - int(11) 
active - int(1) 
+0

什麼樣的SQL是這樣嗎? MATCH不是一項標準功能 - 如果您爲sql的正確版本添加標籤,您可能會得到更好的答案。 SQL Server或MySQL,Oracle等... – bhs

+0

@bhs我認爲這是MySQL,但OP應該用他正在使用的RDBMS標記他的問題。 –

+0

添加mysql標籤,因爲那些似乎是與mysql有關的特定功能 – UnhandledExcepSean

回答

0

首先要說明的是MySQL的全文檢索是字長敏感是很重要的。標識符,即ft_min_word_len,任何低於此長度的字長都將被搜索索引忽略,因此不會出現在結果中。 Fine Tuning將幫助您解決這個最小值最大值問題。

您的查詢,你可以試試下面的訂購

SELECT *,MATCH(file_name_keyword) AGAINST('$file_name_keyword') as relevancy 
FROM `uploaded` 
WHERE MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
AND active = '1' 
ORDER BY relevancy DESC, `votes` DESC 

TIPS 有關全文here更多細節..

+0

謝謝,它命令第一個結果是鋼鐵俠3,然後是鋼鐵俠2,但是如果我搜索鋼鐵俠2,那麼最上面是3,所以不起作用,hm:/ –

+0

無論如何,剛進入我的腦海,它是如何應該命令,如果file_name_keyword是像Iron Man 3 2010 1080p BDRip AAC x264-tomcat12 torrent這樣的東西,它包含2個以上的3個數字,我怎麼能按字符串排序後的第一個小數?所以它忽略了所有數字。 –

+0

FULL TEXT SEARCHING存在侷限性,它不允許根據正則表達式進行搜索和排序。如果你想搜索字段中的值來自用戶,那麼你可能不得不尋找其他的搜索方法..我不確定雖然.. –