2015-07-06 20 views
0

我有以下查詢,但試圖添加ORDER BY relevance DESC。誰能告訴我正確的語法,因爲我沒有成功,將是工作,收到沒有匹配的結果:使用Match Against進行全文搜索 - 將相關性設置爲

$query = 
"(SELECT postid as id, title as name, 'post' as type FROM post WHERE MATCH (title, content) AGAINST ('$keywords' IN BOOLEAN MODE))   
UNION 
(SELECT pdid as id, pdname as name, 'product' as type FROM product WHERE MATCH (pdname, pddesc, pddetail) AGAINST ('$keywords' IN BOOLEAN MODE))"; 

這是我曾嘗試:

$query = 
"(SELECT postid as id, title as name, 'post' as type MATCH (title, content) AGAINST ('$keywords' IN BOOLEAN MODE) as relevance FROM post 
WHERE MATCH (title, content) AGAINST ('$keywords' IN BOOLEAN MODE))   
UNION 
(SELECT pdid as id, pdname as name, 'product' as type MATCH (pdname, pddesc, pddetail) AGAINST ('$keywords' IN BOOLEAN MODE) as relevance FROM product 
WHERE MATCH (pdname, pddesc, pddetail) AGAINST ('$keywords' IN BOOLEAN MODE)) 
ORDER BY relevance DESC 
"; 
+0

這是(和你以前刪除的問題)現在都工作嗎? – halfer

+0

是的,嗨! :)我對此很陌生,專注於正確的語法,同時忽略了一些基本的錯誤。 –

+0

太棒了。你會回答最後一個問題嗎?你可以自己接受它,這標誌着問題已經解決。關於答案,如果你有一個逗號缺失,這聽起來像是一個SQL語法錯誤,但你沒有在你的PHP中檢測到錯誤。一些錯誤檢測代碼在這裏會有很大的幫助。 – halfer

回答

1
$query = 
"(SELECT postid as id, title as name, 'post' as type, MATCH (title, content) AGAINST ('$keywords' IN BOOLEAN MODE) as relevance FROM post 
WHERE MATCH (title, content) AGAINST ('$keywords' IN BOOLEAN MODE))   
UNION 
(SELECT pdid as id, pdname as name, 'product' as type, MATCH (pdname, pddesc, pddetail) AGAINST ('$keywords' IN BOOLEAN MODE) as relevance FROM product 
WHERE MATCH (pdname, pddesc, pddetail) AGAINST ('$keywords' IN BOOLEAN MODE)) 
ORDER BY relevance DESC 
"; 

我發現'as type'之後缺少逗號。編輯後,它現在工作正常。

問題解決了,運轉良好。