我正在为drupal6编写一个相当简单的“角色扮演名称生成器”代码块,并且我在一个表中有无数个名称的开始/中间/结束选项。
我正在寻找一种简单的方法来检索每个函数的随机行,同时使用drupal数据库包装器函数。
找到特定于mysql的解决方案并不难,但我希望保持可移植性,因为我不能保证我的用户将运行mysql。
任何点子都是很棒的!
发布于 2011-01-23 19:49:54
在Drupal7中,SelectQuery类为此提供了一个特定的方法orderRandom(),您可以使用它来实现可移植性。
我猜对于Drupal6,最简单的解决方案是编写一个"if ($GLOBALS‘’db_type‘== 'pgsql')“条件语句,并使用RAND() (mysql)或RANDOM() (pgsql)。几乎没有人在使用其他任何东西,而且那些使用的人可能正在运行Drupal的黑客版本。
发布于 2011-01-23 14:39:41
你需要多大的便携能力?
从概念上讲,解决方案非常简单。
SELECT column FROM table
ORDER BY RANDOM();在这一点上,您可以将第一行作为您的随机行。一个问题是不同的平台使用不同的功能。PostgreSQL (上图)使用RANDOM(),MySQL使用RAND()。IIRC,SQL Server有一个RAND()函数,但在单个查询中重复使用它会返回相同的值。因此SQL Server要求"ORDER BY NEWID();“(我可能对SQL Server的理解是错误的。)
https://stackoverflow.com/questions/4771980
复制相似问题