Получение случайной строки с использованием функции переноса базы данных drupal - PullRequest
0 голосов
/ 23 января 2011

Я пишу довольно простой блок 'ролевого генератора имен' для drupal6, и у меня есть множество опций начала / середины / конца для имен в таблице.

Я ищу простой способ получения случайной строки каждого из них, оставаясь с функциями оболочки базы данных drupal.

Нетрудно найти решения, специфичные для mysql, но я хотел бы остаться переносимым, поскольку у меня нет гарантии, что мои пользователи будут использовать mysql.

Любые указатели будут изящными!

Ответы [ 2 ]

3 голосов
/ 23 января 2011

В Drupal 7 класс SelectQuery имеет специальный метод для этого, orderRandom (), который вы можете использовать для переносимости.

Полагаю, для Drupal 6 самое простое решение - написать условный оператор if ($ GLOBALS ['db_type'] == 'pgsql') "и использовать либо RAND () (mysql), либо RANDOM () (pgsql). ). Почти никто не использует что-либо еще, и те, кто это делает, вероятно, в любом случае используют взломанную версию Drupal.

0 голосов
/ 23 января 2011

Насколько вам нужно быть портативным?

Концептуально решение действительно довольно простое.

SELECT column FROM table
ORDER BY RANDOM();

И в этот момент вы можете просто взять первый ряд как свойслучайный рядОдна проблема заключается в том, что разные платформы используют разные функции.PostgreSQL (выше) использует RANDOM (), MySQL использует RAND ().IIRC, SQL Server имеет функцию RAND (), но при многократном использовании в одном запросе возвращает одно и то же значение.Таким образом, SQL Server требует "ORDER BY NEWID ();"(Я могу ошибаться насчет SQL Server.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...