2011-02-05 2 views
0

PHP에서는 - 가능한 50 개의 결과를 5 개 표시하는 방법은 무작위이지만 모든 결과가 동일한 양으로 표시되도록하려면 어떻게합니까?php - 가능한 50 개의 결과를 무작위로 5 개 표시하려면 어떻게해야합니까? 모든 결과가 동일한 양으로 표시되도록하려면

예를 들어 표에는 50 개의 항목이 있습니다. 모든 페이지로드시이 중 5 개를 무작위로 표시하려고하지만 모든 결과가 동일한 횟수만큼 순환 게재되도록해야합니다. 나는 이것을 위해 많은 시간을 들여 보냈지 만 해결할 수는 없다.

+1

는, 롤 정의에 의해 동일 할 것이다.걱정할 필요가 없다 –

+0

독일의 상태가 헌법에 의해 파산 할 수 있다는 사실만큼 위안이된다. D –

+0

그리고 물론 모두가 수학적 정확도로 대답하는 경향이있다. 반면에 웹 페이지는 과용이다. –

답변

1

50 개 결과를 임시 위치 (파일, 데이터베이스, 사용하는 곳)에 복사하십시오. 그런 다음 임의 값이 필요할 때마다 50에서 5 개의 임의 값을 선택하고 임시 데이터 세트에서 삭제하십시오.

일단 임시 데이터 세트가 비어 있으면 원본을 다시 복사하여 새 데이터 세트를 만드십시오.

+0

감사의 말 양키 그것을하는 간단하고 쉬운 방법. 건배! – Doug

2

읽고 싶지 않으면 "편향된 임의성"으로 스크롤하십시오.

mysql에서는 SeleCT * From table order by rand() limit 5을 사용할 수 있습니다.

원하는 것은 작동하지 않습니다. 그것의 논리적으로 모순.

정의에 의한 완전한 무작위성은 무한한 기간 후에 동일한 분포를한다는 것을 이해해야합니다.

선택 간격이 길수록 분포가 균일합니다.

예를 들어 매 24 시간마다 선택 분포가 균일해야하는 경우 임의의 알고리즘을 사용할 수 없습니다. 정의 상으로는 모순적입니다.

정말 목표에 달려 있습니다.

예를 들어 임의의 요소를 무작위로 취한 다음 동일한 요소가 다음 실행에서 다시 선택 될 가능성을 낮출 수 있습니다. 이렇게하면보다 짧은 시간에보다 균등하게 배포 할 수있는 경험적 방법을 사용할 수 있습니다. 그러나 그것은 무작위가 아닙니다. 잘 특정 부분은 있습니다.

데이터베이스에서 무작위로 선택하고 선택한 요소를 표시 한 다음 아직 선택되지 않은 요소 만 선택하면됩니다. 요소가 남아 있지 않으면 모두 재설정하십시오.

매우 사소하지만 작업을 수행 할 수 있습니다.

타임 스탬프를 사용하여 배포를 좀 더 우아하게 만들 수도 있습니다.

이것은 아마도 ORDER BY RAND()*((timestamps-min(timestamps))/(max(timetamps)-min(timestamps))) DESC 또는 이와 비슷한 형태 일 수 있습니다. 기본적으로 시간 간격 창을 사용하여 항목을 선택하는 타임 스탬프를 정규화 할 수 있으므로 0과 1 사이의 값을 얻은 다음 rand로 곱합니다. 그런 다음 50 %의 새로운 항목을 덜 선택하고 50 %의 임의성을 가질 수 있습니다. 위의 공식에 대해 잘 모르겠다. 아마 틀렸지 만 원리가 작동합니다.

내가 원하는 것은 일반적으로 "편향된 임의성"이라고합니다. 저기에 많은 논문들이 있고 그래서 몇몇 기사들이 있습니다. 여기 예를 들어 :

Biased random in SQL?

관련 문제