2011-01-23 47 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。)