2012-05-28 133 views
1

我該如何做一個entityload,其結果集是隨機順序的?cf9 orm entityload隨機順序

所以,如果我做entityload("modelName"),它將如何設置它的排序順序,使它每次我打電話時都是隨機的不同的?

很多謝謝

回答

2

那麼,簡單的答案是它真的很難與entityLoad()。但是,對於HQL,實際上並不算太壞。

大多數數據庫語言都會有一個隨機函數。因此,使用內置的藝術表和實體,你可以使用ormExecuteQuery生成結果:

<cfscript> 
hql = " SELECT DISTINCT artName 
     FROM art 
     ORDER BY RANDOM() "; 

results = ormExecuteQuery(hql); 

for(art in results) { 
    writeOutput(art & "<br/>"); 
} 
</cfscript> 

因爲它不會返回任何空的記錄,你會得到一個隨機的結果集每次。

希望這有助於^ __^

+0

很好的答案。正如你所說的功能將取決於你的數據庫。在MySQL中,它是RAND()而不是RANDOM() – CfSimplicity

+0

謝謝jcaito ..這工作的一種享受..唯一的問題是,我沒有讓我的setter和getters回來..數據剛剛回來作爲數組或數組(?) 。我還用另一種方法給了我一個完整的實體,包括所有的getter和setter,都會作爲備選答案發布。再次感謝! – Jason

0

我用另一種方法是在我的表(和型號)和隨機填充它的功能來創建中將sortOrder列。可能不如jCaito的選擇那樣高效,但有一些好處。

public function getRandom(){ 
    randomizer(); 
    return entityload("provider", {}, "sortOrder"); 
} 

private void function randomizer(){ 
    source = entityload("provider"); 
    for(i=1;i<=ArrayLen(source);i++){   
     source[i].setSortOrder(randRange(1,999));   
    } 
} 
+0

我可能會建議改變你的範圍爲'randRange(1,source.len())',這樣它會在數組的長度內進行排序 –