выборка случайных строк из базы данных оракула с помощью CodeIgniter Active Record

Я хочу сделать конкретный запрос к базе данных Oracle. Я использую CodeIgniter с драйвером oci db. Мой запрос выглядит примерно так:

SELECT * FROM (select inner_query.*, rownum rnum FROM (SELECT tutor_profiles.id AS "tutor_id", tutor_profiles.full_name AS "full_name", files.file_uri as "file_uri", files.id, count(distinct courses.id) AS "course_count"
FROM tutor_profiles
LEFT JOIN files ON files.id = tutor_profiles.avatar_id
LEFT JOIN courses ON tutor_profiles.id = courses.tutor_id
GROUP BY tutor_profiles.id, tutor_profiles.full_name, files.file_uri, files.id
ORDER BY dbms_random.VALUE) inner_query WHERE rownum <= 4)

Я выбираю случайных репетиторов из базы данных и присоединяю к результату другие таблицы. Проблема в том, что я не могу сгенерировать этот запрос с помощью Active Record. Я получаю ошибку dbms_random.Value, но когда я запускаю ее в редакторе oracle sql, все работает нормально. Кто-нибудь знает, как сгенерировать этот запрос с помощью AR?


person Mythriel    schedule 07.03.2012    source источник
comment
Note: random ordering is not currently supported in Oracle or MSSQL drivers.: codeigniter.com/user_guide/database/active_record.html Active Record CI не решение всех вещей, хотя я хотел бы, чтобы это было, конечно.   -  person Wesley Murch    schedule 07.03.2012


Ответы (1)


Это метод order_by() активной библиотеки записей, который экранирует значение "dbms_random.VALUE".

Я просмотрел библиотеку и нашел следующие допустимые параметры: $orderby, $direction = '', $escape = TRUE

Вы должны указать методу не экранировать вашу строку, и вызов будет выглядеть так:

$this->db->order_by("dbms_random.VALUE", '', false);

В противном случае вы всегда можете выполнить свой запрос без использования активной библиотеки записей.

person georgiar    schedule 22.03.2012