Как я могу рандомизировать строки базы данных, если я использую объекты MySQL - codeigniter - PullRequest
1 голос
/ 15 июня 2011

Моя модель возвращает данные в виде объектов mysql:

return $q->result();

Теперь я хочу перемешать / перемешать данные и отправить их в файл представления.Но когда я использую shuffle($data) на объекте, он не работает, выдает ошибку.Я предполагаю, что это будет работать только в том случае, если моя модель вернет массив.

Есть ли какой-нибудь способ, которым я могу перетасовать / рандомизировать данные, не преобразовывая их в массив или не заставляя модель возвращать массив.

Ответы [ 4 ]

4 голосов
/ 15 июня 2011

Задумывались ли вы о добавлении $this->db->order_by('id', 'random'); при создании запроса? Первый параметр - это имя поля, а второй - порядок (возможные значения: «asc», «desc» и «random»). Посмотрите на функцию order_by для получения дополнительной информации.

EDIT

В качестве альтернативы, вы можете использовать result_array() вместо results(). Вот пример:

// PHP5
$shuffled_result = $this->db->get('table')->result_array();
shuffle($shuffled_result);

// PHP4
$query = $this->db->get('table');
$shuffled_result = $query->result_array();
shuffle($shuffled_result);
1 голос
/ 15 июня 2011

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

0 голосов
/ 15 июня 2011

В mysql вы можете упорядочивать строки с помощью rand (), например:

select product_id  from product order by rand() limit 10;

Таким образом, вы можете получить необходимое количество строк.

EDIT:

@ Дамчи, ты прав. Если таблица больше, чем функция rand () будет медленной. Но каждый раз, сколько строк вы выбираете? Так что, может быть, вы можете получить случайное смещение в php, и sql понравится:

select product_id  from product offset $random_offset limit 10

Хотя порядок product_id такой же, но смещение другое, поэтому, если ваша таблица большая, то каждый раз вы можете получить разные строки. И убедитесь, что ваше смещение, если не больше, чем row_total - limit_num.

0 голосов
/ 15 июня 2011

Хорошо, сделайте вашу модель для возврата данных mysql в виде массива (дайте мне код, если вы не знаете, как), и с этого момента вы можете использовать для перемешивания массива Функция перемешивания

Я не думаю, что вы можете перетасовать базу данных самостоятельно с помощью запроса или чего-то еще

...