2013-06-02 4 views
2

열에서 무작위로 4 개의 행을 선택해야합니다.여러 '열 선택 위치 ...'모든 열 선택

무작위로 4 ID를 생성하고 4 개 요청을 수행하는 것이 좋습니다인가 '데이터베이스에서 선택 열을 어디 ID = ...'

또는 하나 개의 요청에서 모든 행을 선택하고 후 선택?

+0

데이터베이스에서 임의로 4 개의 행을 선택 하시겠습니까? 하나의 요청으로 모두 선택하는 것이 좋습니다. – Anujan

+0

정확히 달성하려는 것은 무엇입니까? 보여줄 코드가 있습니까? 지금 어떤 방법을 사용하고 있습니까? 그 이유는 무엇입니까? – bestprogrammerintheworld

답변

0

기존 ID를 임의로 생성 할 수 있다면 가장 좋은 방법은 where id in (id1, id2, id3, id4)과 같은 절을 사용하는 것입니다. 이렇게하면 하나의 쿼리에서 4 개의 레코드가 생성되므로 불필요한 쿼리 나 레코드를 가져올 필요가 없습니다.

+0

ID의 명명법에 따라 OP는 전체 테이블에서 ID 목록을 미리 가져 와서 무작위로 4 개 선택하고 데이터베이스를 다시 쿼리해야 할 수 있습니다.) - http : // stackoverflow. com/questions/4329396/mysql-select-10-random-rows-600k-rows-fast – Terry

+0

사실,하지만 모든 레코드를 가져 오는 것보다 훨씬 효율적일 것입니다. 매우 높습니다 (예 : 높은 대기 시간). –

+0

아, 다시 쿼리라는 단어를 잘못 사용했다고 생각합니다. 즉, 현재 데이터베이스를 다시 자체 데이터베이스에 가입시키지 만 동일한 데이터베이스의 임의로 선택된 ID 목록에 가입하면됩니다 (링크를 참조하십시오. 내 이전의 코멘트) – Terry

0

앞서 말했듯이 where id in (id1, id2, id3, id4)은 MySQL 관점에서 가장 빠른 방법입니다. 어쨌든, 당신은 그 ID를 생성하는 응용 프로그램에 약간의 논리가 필요합니다 : 4 개의 ID가 모두 존재해야하며 무작위로 배포되고 중복을 피하십시오. 최악의 경우 거대한 쿼리로 모든 존재하는 ID 목록을 검색하고 4 개의 임의 값을 추출하고 다시 쿼리합니다.

SELECT * FROM foobar 
ORDER BY RAND() 
LIMIT 4; 

당신이 이 MySQL의에서 느린 것을 이해한다, 그러나 당신은 응용 프로그램의 속도 이득이있다 : 모든 로직이 수행되어야로

, MySQL을로 선택을 이동하는 것이 현명 할 수있다 논리와 테이블에 똑같이 씨앗을 임의의 가치를 얻을 수 있는지 확인하십시오.

편집 : 댓글은 PHP가이 작업에 고정되어 있는지, MySQL에 고정되었는지 묻습니다. 대답은 '아니오'입니다. "rand 사용"은 수행하지 않습니다. PHP에서 모든 ID를 포함하는 배열이 필요합니다. 그것은 거대한 쿼리, 많은 TCP 트래픽, PHP에서 buildt 될 거대한 배열, 젠드 엔진에 의해 buildt 거대한 btree입니다. 그런 다음 ID를 사용하여 두 번째 쿼리를 실행하여 해당 ID에 대한 행을 가져와야합니다.

+0

모든 행을 선택하고 PHP에서 rand를 사용하면 rand 명령보다 더 빠릅니까? – user2409399

+0

@ user2409399 내 대답을 업데이트하고 "php"로 질문의 태그를 다시 지정 –

+0

PHP에서 rand()로 거대한 쿼리? 이드는 4 명이야? – bestprogrammerintheworld

0

비록 기능이 느릴 수 있지만, 지금까지 속도와 관련된 중요한 문제가 없었습니다. 내 전략은 실제로 자체적 인 쿼리로 데이터베이스를 결합하여 제한이있는 임의의 ID 목록을 반환합니다.

SELECT * 
FROM table AS t1 
JOIN (
    SELECT rowID 
    FROM table 
    ORDER BY RAND() 
    LIMIT 4 
) AS t2 
WHERE t1.rowID = t2.rowID 

존재보다 강력한 솔루션도있다 - (2010 년 요구) this question 체크 아웃 시도가.