2012-10-24 3 views
0

나는 잠시 동안 이것을 찾고 있었지만 성공하지 못했습니다.mysql + php : 여러 무작위 결과 선택

예를 들어 youtube와 같이 recomendation bar를 구현하려고 할 때 오른쪽에 추천 동영상이나 목록이 표시된 동영상이 표시됩니다. 이 순간

나는이 방법을 사용하고 있습니다 :

$offset_result = mysql_query(" SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `$tablename` "); 
$offset_row = mysql_fetch_object($offset_result); 
$offset = $offset_row->offset; 
$result_rand = mysql_query(" SELECT * FROM `$tablename` LIMIT $offset, 9 "); 

이 잘 작동하지만 때로는 어떤 결과를 표시하지 않으며,이 예제를 위해 보여주기 때문에 문제는, 또한 그 랜덤으로하지 않습니다 첫 번째 ID는 200이므로 다음 결과는 id 201과 202가됩니다.

예를 들어 1º 결과 ID 500, 2º 결과 ID 10, 3º 결과 ID 788 등이 9 개의 랜덤 결과를 표시하는 방법이 있는지 알고 싶습니다.

+0

더 좋은 형식으로 코드를 게시하십시오. –

답변

0
사용할 수

의 PHP 랜드()와에 저장 어레이 :

http://php.net/manual/en/function.rand.php

<?php 
$rand_array = array(); 
for($i=1;$i<5;$i++) { 
    $rand_array[$i] = rand(0,500); 
} 
?> 
,536,

그리고 그 이후에 foreach 루프가있는 모든 int로 쿼리를 만들고 데이터로 작업하십시오.

<?php 
foreach ($rand_array as $integer) { 
    $q = "SELECT * from $tablename WHERE id='$integer';"; 
} 
?> 

+0

이것은 해결책이 될 수 있지만 내 테이블에는 ID에 구멍이 있습니다. 삭제해야 할 부분이 있기 때문입니다.존재하지 않는 ID를 계산하지 않는 방법이 있습니까? –

+0

고맙습니다. 내 도움을 위해 추가 할 것입니다. –

1

완전히 확실하지 않음이 당신을 위해 무엇을 찾고있는 답변을 주셔서 감사합니다,하지만 시도 : 함수는 5 개 개의 번호를 만들 수

$result_rand = mysql_query("SELECT * FROM " . $tablename . " ORDER BY RAND() LIMIT 9");

+2

이것은 작동하지만 ORDER BY RAND()가 테이블 내에 많은 행을 가지고있을 때 처리하는 데 시간이 걸릴 수 있습니다. –

+0

예 ORDER BY RAND() 내 테이블이 커질 것이고이 방법은 너무 많은 시간이 걸릴 것이기 때문에 ... –

+0

@HogardelOcio -이 경우 Angelo A 코드의 수정 된 버전을 사용해야합니다. 테이블의 레코드 수를 얻은 다음 데이터베이스에서 선택할 ID 수를 생성합니다. 또한 페이지에 현재 표시된 ID와 동일한 ID 중 하나를 거부 할 수 있습니다. – JamesSwift

0

우선 latter is deprecated이기 때문에 mysql_ 대신 mysqli_ 함수를 사용해야합니다. 안된

$rand_result = mysqli_query("SELECT * FROM $tablename ORDER BY RAND() LIMIT 9;"); 
0

: 랜드()에 의해 두 번째 사용 순서는 무작위 행 얻을

SELECT ID를 @rownum = @ ROWNUM + 1 유, 은 (@rownum 사용자 선택 FROM ROWNUM 이름 AS : = 0) r

이것은 각 행에 순차적으로 고유 번호를 부여합니다. 이제 테이블의 1과 count (*) 사이에 9 개의 난수가있는 임시 테이블을 만들고 그 두 테이블을 함께 가입 시키면 ...

RAND와 주문보다 더 빠를 것 같아요. 난 단지 9 개의 난수가 필요합니다