我是相當愚蠢的(!),但不能完全找出最好的方式來編寫一個查詢的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進行作業嗎?
我計數5個表,而不是4. – 2012-04-11 19:17:39
是否支持(非遞歸)CTE的? – wildplasser 2012-04-11 19:32:07
@SalmanA:你是對的,我把4而不是5,我已經更新了這個:) – deshg 2012-04-12 09:14:31