MySQL 查询 - 加入麻烦......又来了?

标签 mysql sql database join

我希望有人能够帮助我解决我遇到的问题。

我有一个照片数据库的多输入搜索表单。一个文本框 '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/

相关文章:

php - SQL注入(inject): mechanism

sql - SQL 中状态列的 Varchar(10) 或 int

mysql - 在mysql中创建记录

sql - SQL Server 中的 IF 条件

mysql - MySQL 数据库中使用的 VARCHAR(MAX) 与 TEXT 与 .txt 文件

mysql - 如何在 magento 中加载客户的总地址集合

MySQL 在我的收件箱中每个用户只有一封邮件(最新的)

php - MySQL 正在将我的时间戳值转换为 0000-00-00

mysql - 如何将一列数据显示为固定值,而另一列正常显示,两列来自同一列数据?数据库

mysql - 按销售额从表中删除 MySQL 记录