2011-09-24 84 views
2

我希望有人能夠幫助我一個查詢我堅持。MySQL查詢 - 再次加入麻煩...?

我有一個照片數據庫的多輸入搜索表單。一個文本框'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 

這是可以解決的還是我完全做錯事?如果是這樣,可能會有人告訴我什麼,我的意思是做:)

回答

1

你正在做一個LEFT JOIN這意味着它將返回左表(photoSearch)的結果,即使加盟條件不滿足,

LEFT JOIN更改爲JOIN

+0

什麼傳說,謝謝 - 3分鐘的答案是相當不錯:) – TheCarver

+0

其實,我有另一個問題 - 對不起。我試圖在一張照片中搜索一張有兩個名字'Brad Pit','Angelina Jolie'的照片,但我認爲我的IN子句是錯誤的,因爲它會返回所有Brad Pitt照片和所有Angelina Jolie照片,所以它是表現得像一個「或」條款。我需要它來搜索這兩個名稱匹配,是你可以建議的,還是我會創建一個新的問題? – TheCarver