2012-02-04 2 views
1

사용자가 회원 가입을 할 수있는 작은 온라인 앱 (PHP/MySQL)을 구축 중이며 회원 영역 내에서 취할 수있는 퀴즈 목록이 있습니다.온라인 앱에 각 사용자의 배열을 저장하는 방법은 무엇입니까?

주어진 사용자 (즉, 그의 브라우저가 목록이있는 페이지를 요청 했음)에 대한 퀴즈 목록을 표시 할 때 각 퀴즈에 대해 사용자가 이미 과거에 가져 갔는지 여부를 알아야합니다. 그가 그렇게했다면 나는 옆에 체크 표시를 할 것이다. 이는 사용자가 사이트 사용량을 추적하는 데 도움이됩니다.

내 문제 : 기본적으로 각 사용자에 대해 "찍은 퀴즈"목록을 저장해야합니다. 그러나 나는 그것을하는 최선의 방법에 대해 확신하지 못합니다.

내 솔루션 지금까지 : 각 퀴즈에는 ID가 있으므로 각 사용자에 대해 뽑은 퀴즈 목록을 쉼표로 구분 된 문자열로 내 데이터베이스에 저장하려고합니다. 그런 다음 데이터베이스에서 문자열을 읽고이를 배열로 변환합니다 (역으로 저장하는 경우에도 마찬가지입니다).

업데이트 : 분명히 2 가지 실행 가능한 옵션이 있습니다 : 1) 위의 배열을 문자열로 저장하는 방법을 사용하는 것입니다. 2) quiz-id/user-id를 저장하는 다른 MySQL 테이블을 생성하는 것입니다. 한 쌍. 이 시점에서 어떤 솔루션이 더 빠른지 궁금해서 사이트가 인기가 있어야합니다. 첫 번째 옵션을 사용하면 문자열을 배열로 변환하는 추가 작업을 수행 할 것이지만 그 후에는 작은 배열 (즉, 단일 사용자가 퀴즈 만 포함)을 검색하게됩니다. MySQL 솔루션을 사용하면 문자열을 앞뒤로 변환 할 필요가 없지만 훨씬 더 큰 데이터 세트 (즉, 모든 사용자가 퀴즈를 작성)를 검색해야합니다. 다수의 사용자 (예 : 1000)의 경우 어떤 방법이 더 빠르는지 추측 할 수 있습니까?

답변

2

MySQL은 다음 비슷한 테이블 구조 시도처럼 당신이 어떤 것을 사용하는 경우 :

표 : 사용자
user_id | user_name

표 : 퀴즈
quiz_id | quiz_name

표 : quiz_taken
taken_id | user_id (FK) | quiz_id (FK) | timestamp

퀴즈에 참여할 때마다 퀴즈 테이블에 항목을 추가하십시오. 또한 항상 더 많은 색상을 추가하여 자세한 내용을 저장할 수 있습니다.

+0

흥미 롭습니다. 그래서 사용자가 주어진 퀴즈를했는지 확인하려면 다음과 같이 quiz_taken 테이블을 검색합니다. select * from quiz_taken where quiz_id = quiz AND user_id = user; 그리고 나서 내가 뒤로 줄을 가졌다면 그가 가지고 갔다는 것을 의미 할 것이고, 그렇지 않다면 그는 그렇지 않았다. 권리? –

+0

예! 그것은 가능한 접근법 중 하나입니다. – check123

1

이 솔루션은 나에게 괜찮은 것 같습니다. 또는 사용자와 퀴즈에 모두 연결된 외래 키가있는 중간에 "퀴즈"테이블과 users_to_quizs 테이블을 가질 수 있습니다. 그것은 더 많은 관계형 데이터베이스 표준을 준수하지만, 당신이하고 싶은 것을 위해 조금 복잡해 보입니다!

나는 해결책을 고수하겠다. (당신은 PHP를 사용합니까>이 경우 사용 내파에/폭발, 당신은 당신이 정말 빨리 완 것을 얻을 수 있습니다 :-)?!)

+0

그래, PHP를 사용하여, 그래서 나는 explode/implode 변환을 사용합니다. 글쎄, 내가 옳은 길에 있다는 것을 알았 기 때문에 기쁩니다! 감사. –

+0

저는 그 솔루션을 여러 번 직접 사용해 왔습니다. 미래의 진화를 염두에 두십시오! 행운을 빕니다 ! –

0

check123의 솔루션이 좋습니다. 당신은 배열 하나 추가로 전체 퀴즈를 저장하지 않으

taken_id | user_id(FK) | quiz_id (FK) | timestamp | responses 

응답을 별도의 테이블이 더 있지만, 를 응답을 검색 할 필요가 없습니다 퀴즈를 변환하는 경우 배열,

$quiz_string=json_encode($quiz_array) 

//Store $quiz in the responses field 

//and to convert it back to array, use: 
$quiz_array=json_decode($quiz_string_from_database) 

내파를 사용하여 폭발 구축하고 느린에 소요되는 시간입니다. json 완벽하게 작동합니다

관련 문제