2012-04-11 176 views
-1

我是相當愚蠢的(!),但不能完全找出最好的方式來編寫一個查詢的MySQL,並認爲我會張貼在這裏看看是否有人可以幫助(我使用PHP)。我有5個表格:如何有效地合併兩個mysql查詢以返回匹配記錄?

TUsers (ID, Name) 
TJobTypes (ID, Name) 
TJobs (ID, JobTypeID, JobName) 
TJobsRequested (ID, JobID, UserID) 
TJobsOffered (ID, JobID, UserID) 

僅供參考TJobsTypes to TJobs是一對多關係。

用戶可以根據他們可以做的工作和需要/提供的工作來搜索工作交換。因此,如果User1搜索並說他需要'JobA'並且可以提供'JobB'並且User2被列爲需要'JobB'並且可以提供'JobA',那麼這將是匹配。如果User2需要JobB但不能提供JobA,那麼它不匹配。編寫一個查詢來正確匹配它是很容易的,但是用戶也需要能夠基於一般工作類型(而不是特定的工作)進行搜索。因此,如果UserA正在搜索:'需要JobTypeA'和'可以提供JobTypeB',那麼匹配應該是所有在JobTypeA類別中有工作經驗並且在JobTypeB類別中有一個jobrequested的用戶(如果這樣做合理的話! )

如果你只是在尋找一種方式圓(例如顯示誰被列爲需要內JobType = $ typecanhelp工作),那麼這是很容易的,可以做類似的所有用戶:

SELECT DISTINCT TUsers.Fid, TUsers.FUsername, TUsers.FGender 
FROM TUsers, TJobsRequested, TJobs, TJobTypes 
WHERE TJobTypes.Fid='$typecanhelp' 
AND TJobs.FJobTypeID=TJobTypes.Fid 
AND TJobs.Fid=TJobsRequested.FJobID 
AND TUsers.Fid=TJobsRequested.FUserID 
ORDER BY TUsers.Fid 

OR(用於顯示所有被列爲提供JobType = $ typeneedhelp的作業的用戶):

SELECT DISTINCT TUsers.Fid, TUsers.FUsername, TUsers.FGender 
FROM TUsers, TJobsOffered, TJobs, TJobTypes 
WHERE TJobTypes.Fid='$typeneedhelp' 
AND TJobs.FJobTypeID=TJobTypes.Fid 
AND TJobs.Fid=TJobsOffered.FJobID 
AND TUsers.Fid=TJobsOffered.FUserID 
ORDER BY TUsers.Fid 

但我不能解決如何將兩者合併在一起,因爲它們使用相同的基表(TJobs和TJobTypes)。有人能指出我如何合併上述兩個查詢,因此它會返回提供JobType == $ jobcanhelp作業的用戶,並且需要使用JobType = $ jobsneedhelp進行作業嗎?

+0

我計數5個表,而不是4. – 2012-04-11 19:17:39

+0

是否支持(非遞歸)CTE的? – wildplasser 2012-04-11 19:32:07

+0

@SalmanA:你是對的,我把4而不是5,我已經更新了這個:) – deshg 2012-04-12 09:14:31

回答

-1

如果我理解正確,你想做一個INTERSECT,我不認爲這是MySQL支持。看起來你可以使用INNER JOIN來實現與mysql一樣的功能。請參閱this similar questionthis page瞭解更多信息。

+0

這不僅僅是將兩個查詢的結果列在一個結果集中,而是實際只返回匹配兩個結果的結果(即具有匹配jobrequest和匹配joboffer的用戶)?還是我瘋了? :) – deshg 2012-04-11 18:32:01

+0

對不起,我誤解了你的問題。我根據你的評論修改了我的答案。希望能幫助到你。 – 2012-04-11 19:15:43

+0

非常感謝您的回覆,但是我認爲當您使用INNERJOIN時,您需要在FROM子句中使用INNERJOIN 2個表,然後根據您可以一起使用的某些列(例如SELECT a.member_id,a。名稱從內部聯接b USING(member_id,name))?而不是像你一樣內在地加入2個查詢?無論如何,我嘗試了查詢,但它的錯誤,個人查詢工作正常,但不是像這樣一起。我錯過了什麼:)? – deshg 2012-04-12 09:25:59

相關問題