2009-12-05 4 views
1

다음 MySQL을 가지고 있습니다. 나는 무작위 순서로 데이터를 가져오고 싶다.임의로 데이터를 주문하는 방법

아무쪼록 나에게 어떻게하는지 가르쳐 주실 수 있습니까?

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
       FROM products AS P 
       LEFT JOIN categories C 
       ON C.id = P.category_id 
       WHERE C.Name = "Front bottom" 
       AND p.status = "active" 
       '); 

답변

3
$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
        FROM products AS P 
        LEFT JOIN categories C 
        ON C.id = P.category_id 
        WHERE C.Name = "Front bottom" 
        AND p.status = "active" 
        ORDER BY RAND() 
        '); 

당신은 거대한 데이터 세트 (~ 약 10K)에 정말 천천히 수행 할 것이라는 점을 주목해야한다, 그렇게하기 위해 MySQL을의 RAND 기능을 사용할 수 있습니다. MySQL은 테이블의 각 행에 대해 임의의 숫자를 가져 오므로 테이블이 커지면 문제가 발생할 수 있습니다.

더 안전한 방법은 SELECT count(*) as n FROM table을 수행하고 난수를 가져와 LIMIT 1,n을 사용하여 n 번째 행을 가져 오는 쿼리를 수행하는 것입니다. 그것은 단지 1이 필요하거나 동일한 순서로 결과를 갖는 것에 관심이 없다면 효과가있을 것입니다.

만약 당신이 정말로 내 생각에 서버 측에서 그것을하기에 더 좋은 랜덤 세트를 원한다면.

0

당신은 가장 쉬운 방법은 ORDER BY RAND()을 사용

ORDER BY RAND() 
0

을 시도 할 수 있지만, 특히 큰 데이터 세트, 성능이 비참의 (일치하는 모든 행에 대해 임의의 숫자를 필요).

또 다른 방법은 임의로 코드를 만들거나 RAND()를 다시 사용하는 것입니다. 즉, WHERE id in (RAND(), RAND(), RAND(), RAND())은 작동하지만 보증 할 수는 없습니다. 일부 ID가 없 자마자 문제가 발생합니다.

여기는 interesting article on the topic입니다.

관련 문제