我相当愚蠢(!),但无法找到编写mysql查询的最佳方法,并认为我会在此处发布它以查看是否有人可以提供帮助(仅供参考,我正在使用PHP)。我有 5 张桌子:
TUsers (ID, Name)
TJobTypes (ID, Name)
TJobs (ID, JobTypeID, JobName)
TJobsRequested (ID, JobID, UserID)
TJobsOffered (ID, JobID, UserID)
仅供参考 TJobsTypes 到 TJobs 是一对多的关系。
用户可以根据他们可以做的工作和需要/提供的工作来搜索工作交换。因此,如果 User1 搜索并说他需要 'JobA' 做并且可以提供 'JobB' 并且 User2 被列为需要 'JobB' 做并且可以提供 'JobA' 那么这将是匹配的。如果 User2 需要 JobB 做但不能提供 JobA,那么它不匹配。编写查询以正确匹配此内容很容易,但是用户还需要能够根据一般工作类型(而不是特定工作)进行搜索。
因此,如果 UserA 正在搜索:“需要 JobTypeA”和“可以提供 JobTypeB”,则匹配项应该是所有在 JobTypeA 类别中提供工作并且在 JobTypeB 类别中请求工作的用户(如果这有意义的话!)
如果您只是搜索一种方式(例如,在 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
或(用于显示所有被列为提供 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 工作的用户?