2012-11-07 47 views
1

我有一个包含companyID加上一些相关分数的表'scores'。公司ID可以在此表中多次出现。我有另一个表('公司'),其中包含companyID和companyName。我想要做的是查询“公司”表以获取所有公司ID,然后使用此结果使用我先前查询的结果查询分数的“分数”表。我也需要做一些计算。我想我需要循环遍历第一个结果集并将companyID值放入我的第二个查询中。只是不知道如何做到这一点。任何帮助将不胜感激。使用Coldfusion循环查询

我知道这个代码将不能工作,但它可能给你什么,我试图完成一个感觉:

<cfquery name="companyIDs" datasource="myDB"> 
    Select companyID from company 
</cfquery> 

<cfloop> 
<cfquery name="companyScore" datasource="myDB"> 
SELECT Round(sum(leadership)/Count(leadership)) as leadership, 
Round(sum(communication)/Count(communication)) as communication, 
Round(sum(fairness)/Count(fairness)) as fairness, 
Round(sum(ethics)/Count(ethics)) as ethics, 
Round(sum(competence)/Count(competence)) as competence 
FROM scores 
Where companyID = 'companyIDs.companyID' 
</cfquery> 
</cfloop> 

+0

http://dev.mysql.com/doc/refman/5.0/en/join.html –

回答

0

有更好的方法来完成你所需要的,但我回答你的问题,因为你问它。我做了一些修改代码:

<cfloop query='companyIDs'> // add the name of your query to the cloop 
<cfquery name="companyScore" datasource="myDB"> 
SELECT Round(sum(leadership)/Count(leadership)) as leadership, 
Round(sum(communication)/Count(communication)) as communication, 
Round(sum(fairness)/Count(fairness)) as fairness, 
Round(sum(ethics)/Count(ethics)) as ethics, 
Round(sum(competence)/Count(competence)) as competence 
FROM scores 
Where companyID = '#companyIDs.companyID#' // add ## around your output 
</cfquery> 

<cfdump var='#companyScore#'> // dump your results 

</cfloop> 
+0

谢谢。我测试了这个解决方案,它确实工作。也就是说,你,马特和莱利认为这不是要走的路。你会同意Matt的内部连接解决方​​案是最好的吗? – Jason

+0

我同意一个查询对于处理器来说效率更高,而且会更灵活。我再一次回答了你问的问题。如果您继续使用ColdFusion,我会建议您转向更复杂的查询和更简单,更高效的代码。 –

+0

+1内部连接解决方​​案。它效率更高。 –

4

有你可以做到这一点的几种方法,但下面的方式将工作。

<cfquery name="companyIDs" datasource="myDB"> 
Select companyID from company 
</cfquery> 

<cfloop query="companyIDs"> 
<cfquery name="companyScore" datasource="myDB"> 
SELECT Round(sum(leadership)/Count(leadership)) as leadership, 
Round(sum(communication)/Count(communication)) as communication, 
Round(sum(fairness)/Count(fairness)) as fairness, 
Round(sum(ethics)/Count(ethics)) as ethics, 
Round(sum(competence)/Count(competence)) as competence 
FROM scores 
Where companyID = #companyIDs.companyID# 
</cfquery> 
</cfloop> 

你也可以将你的两个查询结合在一起,所以你只需要一个整体查询,那将是首选的方法。

<cfquery name="companyScore" datasource="myDB"> 
SELECT companyID, 
Round(sum(leadership)/Count(leadership)) as leadership, 
Round(sum(communication)/Count(communication)) as communication, 
Round(sum(fairness)/Count(fairness)) as fairness, 
Round(sum(ethics)/Count(ethics)) as ethics, 
Round(sum(competence)/Count(competence)) as competence 
FROM scores INNER JOIN company ON scores.companyID = company.companyID 
GROUP BY companyID 
</cfquery> 
+0

@Jason - 在一个循环中查询很少是正确的做法。听起来你所需要的只是一个'join'。参见Matt的第二个例子。尽管你可能需要调整它以“组合”公司的结果。 – Leigh

+0

我更新了我的第二个示例,它可能会起作用。隔开将公司添加到查询中。 –

+0

@MattBusche - 感谢您的回复。尝试了解第二个示例中的代码。当“公司”是表格而不是列时,为什么选择“公司”和“公司”进行分组?谢谢。 – Jason