我正在为drupal6编写一个相当简单的'角色扮演名称生成器'块,并且我在表中有很多名称的开始/中间/结束选项。
我正在寻找一种简单的方法来检索每个随机行,同时保留drupal数据库包装函数。
找到特定于mysql的解决方案并不难,但我想保持便携性,因为我无法保证我的用户将运行mysql。
任何指针都会很漂亮!
答案 0 :(得分:3)
在Drupal 7中,SelectQuery类有一个特定的方法,orderRandom(),您可以使用它来移植。
我猜对于Drupal 6,最简单的解决方案是编写一个“if($ GLOBALS ['db_type'] =='pgsql')”条件语句并使用RAND()(mysql)或RANDOM()(pgsql )。几乎没有人使用任何其他东西,那些人可能正在运行黑客版本的Drupal。
答案 1 :(得分:0)
您需要多么便携?
从概念上讲,解决方案非常简单。
SELECT column FROM table
ORDER BY RANDOM();
并且,此时,您可以将第一行作为随机行。一个问题是不同的平台使用不同的功能。 PostgreSQL(上面)使用RANDOM(),MySQL使用RAND()。 IIRC,SQL Server具有RAND()函数,但在单个查询中重复使用它返回相同的值。所以SQL Server需要“ORDER BY NEWID();” (我可能错了SQL Server。)