2011-01-23 43 views
0

我正在爲drupal6編寫一個相當簡單的「角色扮演名稱生成器」模塊,併爲表中的名稱提供了無數的開始/中間/結束選項。使用Drupal數據庫包裝功能檢索隨機行

我正在尋找一種簡單的方法來檢索每個隨機行,同時留在drupal數據庫包裝函數。

這不難找到特定於mysql的解決方案,但我想保持可移植性,因爲我不能保證我的用戶將運行mysql。

任何指針都會很漂亮!

回答

3

在Drupal 7中,SelectQuery類有一個特定的方法,orderRandom(),你可以使用它是可移植的。我猜Drupal 6最簡單的解決方案是編寫一個「if($ GLOBALS ['db_type'] ==''pgsql')」條件語句,並使用RAND()(mysql)或RANDOM()( pgsql的)。幾乎沒有人使用其他任何東西,而那些做的可能是運行Drupal的黑客版本。

0

你需要多便攜?

從概念上講,解決方案非常簡單。

SELECT column FROM table 
ORDER BY RANDOM(); 

而且,在這一點上,你可以把第一行作爲你的隨機行。一個問題是不同的平臺使用不同的功能。 PostgreSQL(上面)使用RANDOM(),MySQL使用RAND()。 IIRC,SQL Server有一個RAND()函數,但在單個查詢中重複使用它會返回相同的值。所以SQL Server需要「ORDER BY NEWID();」 (我可能是錯誤的SQL Server。)