我希望有人能够帮助我解决我遇到的问题。
我有一个照片数据库的多输入搜索表单。一个文本框 'searchWords' 用于搜索我的 'photoSearch' 表,另一个文本框 'specificPeople' 搜索 'people' 表,以搜索特定的人。
例如,用户可能会在框 1 中搜索“伦敦多切斯特酒店”,并在框 2 中搜索“布拉德皮特”。
这是我正在尝试的,但它只返回“伦敦多切斯特酒店”的结果,它忽略了我的人物搜索:
SELECT photoSearch.photoID, Left(photoSearch.caption,25), photoSearch.allPeople, photoSearch.allKeywords
FROM photoSearch
LEFT JOIN ( photoPeople INNER JOIN people ON photoPeople.peopleID = people.peopleID)
ON photoSearch.photoID = photoPeople.photoID AND people.people IN ('kate moss','jamie hince')
WHERE MATCH (caption, allPeople, allKeywords) AGAINST ('+dorchester +hotel' IN BOOLEAN MODE)
AND
photoSearch.dateCreated BETWEEN '2011-07-21' AND '2011-10-23'
ORDER BY photoSearch.dateCreated
如果我去掉 JOIN,全文搜索就完美了。我的表架构有点像这样:
**photoSearch**
photoID INT / AUTO / INDEX
caption VARCHAR(2500) / FULLTEXT
allPeople VARCHAR(300) / FULLTEXT
allKeywords VARCHAR(300) / FULLTEXT
dateCreated DATETIME / INDEX
**photoPeople**
photoID INT / INDEX
peopleID INT / INDEX
**people**
peopleID INT / INDEX
people VARCHAR(100) / INDEX
这是可以解决的还是我完全做错了事?如果是这样,有人可以告诉我我打算做什么 :)
最佳答案
您正在执行 LEFT JOIN
,这意味着即使连接条件失败,它也会返回左表 (photoSearch
) 的结果,
将 LEFT JOIN
更改为 JOIN
。
关于MySQL 查询 - 加入麻烦......又来了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536187/