2011-07-12 87 views
0

您好我有這樣的SQL語句全文搜索不同的數據

SELECT *, MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) AS score, MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) AS sscore 
FROM users INNER JOIN groups 
WHERE MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) OR MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) 
ORDER BY 'score' Desc 

1)我怎麼能爲了通過關節點?我的意思是在這個sql語句中,它爲第一個匹配創建了一個分數,第二個分數創建了一個分數。我如何添加這兩個分數並按該分數排序?

2)另外我知道,因爲數據是不一樣的INNER JOIN方式不是最好的。無論如何,我可以刪除它嗎?

最後,如果我刪除IN布爾模式,當我使用例如模擬和first_name是simos我沒有得到結果。事實上,如果我把模擬爲,我會在布爾模式下得到一個空的結果集。

編輯:我回答我的第二個問題做這個

(SELECT `id`,MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE) AS score FROM `users` WHERE MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE)) 

工會 (SELECT groupid,MATCH(組名)反對()AS評分從groups WHERE MATCH(組名)反對(''? ?「))

這雖然改變了一切,雖然我並不需要一個關節點,但仍然有與IN BOOLEAN MODE

回答

1

0123問題是不正確的,它將嘗試通過固定字符串score'進行排序,而不是您在match ... against中創建的別名。

嘗試

... 
ORDER BY (score + sscore) DESC 
+0

確定這是不是隻是爲了成績更好。絕對更好。儘管我創建了一個UNION查詢,但是這個查詢似乎仍然更好。如何刪除IN BOOLEAN MODE,但仍然有正確的結果?當我不使用布爾模式時,當我沒有把整個名稱,我根本沒有得到任何結果。 LIKE比這更好:P – viper

+0

你需要布爾模式來支持通配符。否則,它會以「自然語言模式」運行,而不會使用通配符。 –

+0

我真的不明白你的意思。在布爾模式下,一切都很完美,支持通配符。至少我看到了我想要的結果。例如我是一個5字母的單詞,如果我把第一個三字母+ *放在布爾模式中,它會返回結果,但如果我這樣做沒有布爾模式,它將不會返回任何結果 – viper