10000 개가 넘는 테이블에 정의 된 임의 순서를 지정하려고합니다. 나는 시작 날짜를 활용하고 무작위로 할당 된 각 연속 날짜에 1 초를 더하는 기능이 있습니다. 그런 다음 무작위로 지정된 날짜순으로 정렬 할 수 있습니다. 내 기능은 50 개의 레코드로 잘 작동했지만 10000+ 개의 레코드로는 실패합니다.10000 + 레코드에 무작위 주문 할당
약 9000 개의 레코드에 대해 정확한 날짜가 설정되지만 1146 개의 레코드가 할당됩니다. 0 (1969-12-31 19:00:00)이 작업이나 유사한 작업을 얻는 데 도움이된다면 감사하겠습니다.
function randomize(){
$count = $this->Application->find('count');
$order = range(0, $count-1); // Array of numbers 0 to count-1
$startDate = strtotime('December 13, 2011 0:00:00');
shuffle($order); // scramble array of numbers
$Applications = $this->Application->find('all');
set_time_limit(0);
foreach($Applications as $app){
$this->Application->id = $app['Application']['id'];
$this->Application->saveField('order', date('Y-m-d H:i:s', $startDate + $order[$this->Application->id]));
}
set_time_limit(30);
}
업데이트 : 나는 MySQL 데이터베이스를 사용하고 있지만 1 개 무작위 배정에 대한 영구적 인 상태를 필요로하고, RAND에 의해 주문에 따라 무작위 반복하지(). 오버 헤드를 줄이기 위해 위의 코드를 업데이트했고, php.ini의 메모리를 128M에서 256M으로 늘렸다. 코드 변경으로 잘못된 날짜는 더 이상 0이 아니지만 $ orderDate와 같아서 $ order 배열의 배열에 문제가 될 수 있음을 나타냅니다.
레코드를 정렬하는 데 datetime 필드를 사용하려는 이유가 확실하지 않습니다. 왜 단순히 증가하는 정수를 사용하지 않는가? – JJJ
데이터 소유자가 요청한 내용입니다. 왜 그들이 그것이 원하는지 모르지만, 그들이 원하는 것입니다. – Naidim
제쳐두고, 여러분은'find' 메소드에서'id'를 돌려줌으로써 이것을 더 최적화 할 수 있어야합니다.당신은 다른 것을 사용하지 않으므로, 그것을 모두 포함하는 것은 아닙니다. – mrlee