2013-10-16 1 views
0

다음 페이지 단추를 클릭 할 때 데이터베이스에서 사용자 테이블의 임의 순서를 유지하는 솔루션을 찾고 있습니다. 사실방법 : 페이지 번호가있는 user_id (RAND) 별 MySQL 순서

나는 1000 사용자와 데이터베이스를 가지고 있고 10 사용자 (A 멤버에) 각 페이지를 표시하려면, 내 쿼리는 다음과 같다 :

이제
$sql = "SELECT * FROM users ORDER BY user_id LIMIT 1,10"; 

나는 RAND의 ORDER BY 싶습니다() 다음 페이지를 클릭 할 때를 제외하고는 작동합니다. 그런 다음 다시 섞여서 동일한 사용자가 다시있을 때가 있습니다.

제 질문은 첫 페이지와 다음 페이지에서도 무작위 순서를 유지하는 해결책에 관한 것입니다.

은 누군가가 1000 1에서 단행 번호가 처음으로 멤버를 방문하고 번호입니다 후 $ _SESSION 변수 에 위치하여 회원을 주문할 때 $ _SESSION 변수를 설정하려고 생각 user_id과 같습니다.

이 가능 할 수있는 방법을 몰라,하지만 난 실제로 같은 솔루션 상상 :

이 같은 두 페이지 (다음 페이지)를 클릭하면 그래서 MySQL의 쿼리를해야합니다

$numbers = range(1, 1000); 

$shuffled_numbers = shuffle($numbers); 

$sort = $_SESSION['random_user_sort'] = $shuffled_numbers; 

$sql = "SELECT * FROM users ORDER BY $sort LIMIT 11,20"; 

이 방법이나 더 나은 아이디어로 작동시키는 데 필요한 모든 해결책은 무엇입니까?

+0

당신은 단지 1000 개의 행을 가지고 있으므로 모든 것을 랜덤 화하고 응용 프로그램 수준에서 페이지 매김을 처리하므로 데이터베이스에만 적용됩니다. – Strawberry

+0

더 나은 아이디어는 이것을하지 않을 것입니다. 이전에 선택한 사용자를 알아야 할 것입니다. 그렇다면 수백만 개의 테이블을 보유하고 있다면 어떻게 될까요? 나는. 적어도 느려질 것입니다 –

+0

사용자 관점에서 목표가 무엇인지 설명해주십시오. 비즈니스 로직에 관한 한 정확히 당신이하고 싶은 일과 기술적으로 어떻게 달성 할 것인지에 대한 것입니다. 나는 당신이 달성하기를 바라는 것이 더 많은 것을 확장 할 수있는보다 쉬운 해결책을 가지고 있다고 생각합니다. – idipous

답변

1

RAND() 기능은 정말 난수를 생성하지 않고 의사 난수 무엇이라고 : 숫자는 결정적 공식으로 계산하고는 무작위 보기 의도하고 있습니다. 새 번호를 계산하려면 이전 값을 사용하여 수식을 적용하면 과 다른 출력이 결정적 함수로 나타납니다. 입력을 사용합니다.

초기 번호는 시드으로 알려져 있습니다. 당신은 당신이 RAND()이 선택적 인수를 가지고 것을 볼 수 있습니다 have a look at the manual 경우

RAND(), RAND(N)

의 범위는 0 < = V < 1.0 임의의 부동 소수점 값 v를 돌려줍니다. 일정한 정수 인수 N이 지정 경우, 내가 가고 싶은 곳 컬럼의 반복 순서 당신은 아마 지금 쯤은 알아 냈어요

가치를 생산하는 종자 값으로 사용됩니다

mysql> SELECT language_id, name FROM language ORDER BY RAND(33); 
+-------------+----------+ 
| language_id | name  | 
+-------------+----------+ 
|   3 | Japanese | 
|   1 | English | 
|   4 | Mandarin | 
|   6 | German | 
|   5 | French | 
|   2 | Italian | 
+-------------+----------+ 
6 rows in set (0.00 sec) 

mysql> SELECT language_id, name FROM language ORDER BY RAND(33); 
+-------------+----------+ 
| language_id | name  | 
+-------------+----------+ 
|   3 | Japanese | 
|   1 | English | 
|   4 | Mandarin | 
|   6 | German | 
|   5 | French | 
|   2 | Italian | 
+-------------+----------+ 
6 rows in set (0.00 sec) 

추신 매뉴얼은 시드 범위 (단지 의 정수인라고 명시되어 있습니다)에 대해 명시 적으로 설명하지는 않았지만, 약간의 추가 조사가 필요하거나 빠른 테스트가 필요할 수도 있습니다.

+0

완벽 함,이 점이 나를 이해하는 데 도움이되었으며 다음 페이지에 주문을 유지하기 위해해야 ​​할 일을 이제 알았습니다. 감사! – lickmycode