MySQL Query - присоединиться проблемы ... снова? - PullRequest
2 голосов
/ 24 сентября 2011

Я надеюсь, что кто-нибудь сможет помочь мне с вопросом, на котором я застрял.

У меня есть многократная форма поиска для базы данных фотографий. Одно текстовое поле «searchWords» предназначено для поиска в моей таблице «photoSearch», а другое текстовое поле «specificPeople» выполняет поиск в таблице «people» для поиска конкретных людей.

Например, пользователь может искать «Dorchester Hotel London» в окне 1 и «Брэд Питт» в окне 2.

Это то, что я пытаюсь, но это только возвращает результаты для "Dorchester Hotel London", это игнорирует мой поиск людей:

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

Это поправимо или я все делаю не так? Если так, может кто-нибудь показать мне, что я должен делать:)

1 Ответ

1 голос
/ 24 сентября 2011

Вы делаете LEFT JOIN, что означает, что он вернет результаты для левой таблицы (photoSearch), даже если условие соединения не выполнено,

Изменить LEFT JOIN на JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...