2014-02-05 256 views
0

我試圖用這個SQL來實現我的簡單的論壇搜索:MySQL不會返回正確的結果

SELECT t.topic_id, t.`topic_title` , t.author_id, t.`creation_date` , u.username 
FROM `forum_topics` t 
LEFT JOIN `users` u ON t.author_id = u.user_id 
AND MATCH (
t.`topic_title` 
) 
AGAINST (
? IN BOOLEAN MODE 
) 
ORDER BY t.creation_date DESC 
LIMIT 0 , 30 

所以它只是匹配叫板的稱號,我遇到的問題是它是無論如何,每次都會返回相同的結果。在phpmyadmin中測試它給我沒有用戶名,這意味着連接不起作用,我不知道爲什麼作爲author_id匹配user_id罰款。

我錯過了什麼是如此明顯我看不到它?

+0

您能否介紹失敗的搜索條件? –

+0

那麼,例如我搜索「測試」,並獲得許多不包含「測試」一詞的論壇主題標題。 – NaughtySquid

回答

2

是的問題是顯而易見的。您正在使用left join,即使沒有匹配,也能保持一切。將條件移至where子句:

SELECT t.topic_id, t.`topic_title` , t.author_id, t.`creation_date` , u.username 
FROM `forum_topics` t LEFT JOIN 
     `users` u 
     ON t.author_id = u.user_id 
WHERE MATCH (t.`topic_title`) AGAINST (? IN BOOLEAN MODE) 
ORDER BY t.creation_date DESC 
LIMIT 0 , 30 
+0

DOH!感謝那。 – NaughtySquid