10 개의 행이있는 테이블이 있습니다. 나는 첫 번째와 임의의 3 개의 임의의 행을 가져오고 싶다. 하나의 쿼리로 수행 할 수 있습니까?테이블에서 처음과 다른 임의의 행을 얻는 방법
감사합니다,
물론10 개의 행이있는 테이블이 있습니다. 나는 첫 번째와 임의의 3 개의 임의의 행을 가져오고 싶다. 하나의 쿼리로 수행 할 수 있습니까?테이블에서 처음과 다른 임의의 행을 얻는 방법
감사합니다,
물론내가 할 줄 :
SELECT * FROM Foo ORDER BY ID LIMIT 1 --First row
UNION
SELECT * FROM Foo WHERE ID NOT IN (SELECT ID FROM Foo ORDER BY ID LIMIT 1)
ORDER BY RAND() LIMIT 3
(SELECT * FROM table ORDER BY id ASC LIMIT 1) UNION (SELECT * FROM table ORDER BY RAND() LIMIT 3)
, 당신은하지만, 임의의 부분에서 첫 번째 행을 선택하지 할 수 있습니다 ABY 당신은 내가 응용 프로그램 계층에서이 일을 추천 할 것입니다 ANY 3
이 하나 하나 위의 비슷합니다 .. – insomiac
말했다 나중에 캐싱을 소개 할 수 있습니다. 또한 애플리케이션 내에서 데이터베이스 레이어보다 무작위로 작업하는 것이 훨씬 빠릅니다.
// Your database stuff
while ($row = $result->fetchRow()) {
$results[] = $row;
}
$firstResult = array_shift($results);
for ($i = 0 ; $i < 3 ; $i++) {
$randomKey = array_rand($results);
$randomResults[] = $results[$randomKey];
}
echo $firstResult;
foreach ($randomResults as $randomResult) {
echo $randomResult;
}
을 매우는 해당 테이블에있는 행 수에 따라 달라. 10 행 또는 20 행만있는 경우 캐싱을 사용하는 것이 좋습니다. 그러나 테이블이 100 000 개의 행으로 구성된다면? 네 개를 가져 오기 위해서만 데이터베이스 연결을 통해 이들 모두를 전송하고 싶지는 않을 것입니다. – Yogu
동의. 그러나 주문 부작위와 노동 조합에 대해서도 마찬가지라고 할 수있다. –
그러나 모든 결과를 가져올 필요는 없지만 임의 함수로 선택한 세 가지 결과 만 가져올 수 있습니다. 그런 다음 LIMIT를 사용하여 이러한 행을 정확하게 선택할 수 있습니다. – Yogu
고마워요. – insomiac