2012-11-07 46 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