확실히 동적 열을 만들지 마라! (각 퀴즈에 대한 열 없음). 또한 사용자 (또는 일반적으로 모든 테이블)에 사용자 (또는 일반적으로 테이블 항목)를 식별하지 않을 때 열을 추가하는 것은 좋지 않습니다. ...
이것은 예를 들어 normalization인데, . 이를 위해 3 개의 표를 만들고 foreign keys을 작성하여 점수가 항상 기존 사용자 및 퀴즈를 참조하는지 확인하십시오. 예컨대 :
users
-id
, nickname
, name
quizzes
-id
, quizName
, quizOtherData
scores
-id
, user_id
(참조 users.id
), quiz_id
, (ref.quizzes.id
) score
, 그리고 퀴즈 사용자 당 scores
테이블에 행을 추가합니다. 또한 user_id
및 quiz_id
열에 UNIQUE
키를 만들어 사용자가 1 회 이상 퀴즈를 완료하지 못하도록 할 수 있습니다.
이것은 빠르며 중복 된 (불필요한 여분의) 데이터를 저장하지 않습니다.
예를 들어 퀴즈 결과를 보려면 다음과 같이 입력하십시오. 내가 바로 여기에 가입하지 않은 사용자가있을 수 있기 때문이다 사용하는 이유
SELECT users.*, scores.score
FROM scores RIGHT JOIN users ON(users.id=scores.user_id)
WHERE scores.quiz_id = 4
ORDER BY score DESC
이유 : 낮은 점수로 가장 높은에서 주문이 퀴즈를 제출의 백성, 4 및 사용자 정보, 당신은 같은 쿼리를 할 것 퀴즈, 그러나 모든 항상 인해 foreign keys
모든 사용자의 전반적인 정보를 얻으려면 (기존 사용자 & 퀴즈를 점수, 퀴즈 및 점수 당신은 같은 것을 할 것 :
SELECT *
FROM quizzes
LEFT JOIN scores ON(quizzes.id=scores.quiz_id)
LEFT JOIN users ON(users.id=scores.user_id)
ORDER BY quizzes.id DESC, scores.score DESC, users.name ASC
을 BTW : PHP를 처음 접했거나 다른 사람이이 정보를 읽는다면 PHP's PDO 인터페이스를 사용하여 데이터베이스와 통신 할 수 있습니다. mysql_query와 같은 AVOID 함수는 적어도 mysqli_query을 사용하지만 이식성을 위해서는 PDO를 사용하는 것이 좋습니다.
제 아이디어는 학생들이 나중에 점수를 얻을 수 있다는 것입니다. 나는 당신의 솔루션을 좋아해서 학생과 테스트로 검색 할 수 있습니다 : D는 문제에 접근하는 가장 좋은 방법에 대해 조금 확신하지 못했습니다 – MaxQ