2012-04-11 148 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

相关问题