У меня есть форма многократного ввода, которая имеет 2 текстовых поля.Одно текстовое поле для «searchWords», а другое для «specificPeople».
В первом текстовом поле может быть «Dorchester Hotel London», а во втором - «Брэд Питт / Анджелина Джоли».».Используя ASP, я преобразую значение второго текстового поля в формат, который будет принимать мое предложение IN, например, это ('Брэд Питт', 'Анджелина Джоли').
SELECT photoSearch.photoID, Left(photoSearch.caption,25), photoSearch.allPeople, photoSearch.allKeywords
FROM photoSearch
JOIN ( photoPeople INNER JOIN people ON photoPeople.peopleID = people.peopleID)
ON photoSearch.photoID = photoPeople.photoID AND people.people IN ('Brad Pitt','Angelina Jolie')
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
Это работает без ошибок, но этоне выпускает записи, в которых есть Брэд и Анджелина вместе.Это показывает записи одного Брэда и записи одной Анджелины.Так что именно здесь я впервые понял, что предложение IN работает как OR.
Как можно изменить этот запрос, чтобы он возвращал строки, которые имеют оба этих конкретных имени, а не одно из них?
Моя БД выглядит примерно так:
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
Любая помощь, с благодарностью полученная ... как всегда:)
Пример того, что находится внутри таблиц:
photoSearch
photoID | caption | dateCreated
1900 Dorchester Hotel... 2011-10-03
'photoPeople'
[photoID] | [peopleID]
1900 147
1900 148
'people'
[peopleID] | [people]
147 Brad Pitt
148 Angelina Jolie