我正在尝试使用此SQL在我的简单论坛上实现搜索:
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 :(得分: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