2011-10-05 1 views
1

나는 최신 뉴스 데이터베이스에서 무작위로 4 개의 항목을 추출해야합니다.Mysql : 'Rand() Limit 4'로 주문 하시겠습니까?

이 표에는 많은 행이 있으므로 RAND()의 낭비 나 자원 낭비로 그렇게하는 것이 현명합니까? - 테이블 전체를 돌아가서 순서를 바꾸겠습니까?

더 좋은 방법은 없나요? 수백 개의 행이있는 테이블에서 무작위 추출 항목을 추출 하시겠습니까?

예 :

$l=$database->query("SELECT car,price,thumbnail FROM cardb WHERE type='new' order by RAND() LIMIT 4"); 
foreach($l as $l){print_r($l);} 

Thankx 시간을 복용

+1

의 중복 가능성 (http://stackoverflow.com/questions/ 1243855/how-can-i-optimize-mysqls-order-by-rand-function) –

답변

0

음 ... 나는 두 개의 질의에서이 작업을 수행 할 것} 에 대답하기 위해. 임의의 행 번호를 가져옵니다 :

SELECT 
    floor(count * rand()) r1, 
    floor(count * rand()) r2, 
    floor(count * rand()) r3, 
    floor(count * rand()) r4 
FROM 
    (SELECT count(*) count FROM cardb WHERE type = 'new') c 

를 얻을 행 : [? 내가 RAND에 의해 MySQL의의 ORDER를 최적화하는 방법() 함수]

SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r1}, 1 
UNION ALL 
SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r2}, 1 
UNION ALL 
SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r3}, 1 
UNION ALL 
SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r4}, 1 
+0

해당 쿼리는 결과 집합에 중복을 가질 수 있습니다. 'ORDER BY RAND()'는 그렇지 않습니다. –

+0

@MichaelMadsen 그래,하지만이게 큰 문제는 아닌 것 같아. 그렇지 않으면 PHP 측에서 고유 한 난수를 생성 할 수 있습니다. 어쨌든 이것이 가장 자원 절약적인 솔루션 중 하나라고 생각합니다. – Karolis