Forum Clubic

Construction d'une requete

Salut, j’ai besoin d’aide pour faire une requête.

J’ai un concours dont je passe les détails.
Il y a 3 vainqueurs possibles.
Le 1er part avec 3 lots, le 2eme avec 2 lots et le 3eme avec un lot !

1er point :
Le vainqueur est celui qui a trouvé le plus de bonnes réponses, le 2eme celui qui a trouvé le plus de bonnes réponse après le 1er, et le 3eme celui qui a trouvé le plus de bonnes réponse après le 2eme.
2eme point :
Si j’ai plusieurs personnes avec la même réponse, un sélection aiuhasard est faire, et les perdants passent 2eme ou 3eme

Comment faire çà autrement qu’en faisant une requête une par une ??
Plutôt que de faire

  • requête pour savoir celui qui a 20 ; requête pour tirer au sort si plusieurs vainqueurs
  • requête pour savoir celui qui a 19 ; requête pour tirer au sort si plusieurs vainqueurs
    ainsi de suite jusqu’à 0

Y a t-il un moyen plus pratique ?
Une autre solution pour ce que je veux faire ?

Merci d’avance pour vos avis/conseils

Ceci mon ami s’appel un algorithme.

Je te propose l’utilisation des sessions afin de changer compléter ton alogo. :wink:

L’utilisateur démarre le “concours” quiz.


$_SESSION['Quiz']['Time']['Start'] = time();

L’utilisateur répond enregistre la question n.


$_SESSION['Quiz']['Answer'][$i] = $answer;
// $i étant le numéro de la question.
// $answer étant la réponse

L’utilisateur finit le “concours” quiz.


$_SESSION['Quiz']['Time']['End'] = time();

Tu faits tes calculs et tu enregistre le résultat dans ta base de données MySQL / SQLite ou PosGreSQL !

[Astuce]
Le temps de départ et de fin sert à déterliner le gagnant en cas de réponses égales. :sol:
Edité le 17/09/2007 à 11:07

t’es données sont-elles stockées dans une base de données ?


SELECT *
FROM participants
ORDER BY 
	score DESC,
	RAND()
LIMIT 3;

Je faisais allusion à la procédure pour passer le “concour” quiz.
Si tu as déjà réaliser ton script de quiz…
Le mieux, c’est :

[Optimisation]
N’utilise pas * mais les champs que tu veux faire ressortir.
Exemple :


SELECT id, nickname FROM participants ORDER BY score DESC, RAND() LIMIT 3;

Non, mais dans les sessions de php : Session
Edité le 17/09/2007 à 11:36

c’est ce que je demandais ^^

merci beaucoup pour vos réponses !!!
Je vais mieux m’expliquer.

Mon concours est un concours audio. Un son comprend 20 extraits de titres de dessins animés.
Le vainqueur est celui qui a trouvé le plus de titres, un titre trouvé valant un point (max 20 points).

J’ai 4 tables.

  • Une table membre qui comprend l’id du membre, son adresse etc …
  • Une table infos_membre qui comprend les infos du membre pour ce concours audio (idconc, id membre, nbreponse, participation)
    le champ nbreponse est le champ qui enregistre le nombre de réponse bonne.
  • Une table bonne_reponse (j’ai mal nommée la table mais bon …) qui contient la liste des titres (100 exactement) avec un champ titre et champ valeur : 1 pour savoir que c’est un titre présent dans le son, 0 pour savoir qu’il n’y est pas
  • Une table bonne_reponse_has_membre, qui enregistre les réponse de l’internaute (id, idmembre,idbonnreponse)

J’explique maintenant comment le concours se passe :
A la 1ere page, il y a le son et en dessous le formulaire (20 listes déroulantes comportant les titres possibles grace à la BDD).
Une fois le formulaire envoyé, la page suivante enregistre les réponses de l’internaute dans la base (dans la table bonne_reponse_has_membre), puis une requête est lancée afin de compter le nombre de bonnes réponse (requete pour savoir quel titre valant 1 a été trouvée par l’internaute), ce nombre est ensuite ajouté dans la base (dans le champ nbreponse de la table infos_membre)

Ensuite, sa participation est prise en compte, il ne peut pas participé 2 fois, il choisi ses lots (des mangas), et c’est terminé.
J’espère avoir été clair, que ce n’est pas brouillon.

Donc maintenant, vos avis/conseils :

Je ne souhaite pas faire cela, cependant, ça me sera utile pour d’autre concours, j’avais envie d’inclure cette idée de temps. Ce sera pour une prochaine fois.

Oui

Je vais tester cette solution dans l’après midi !
Merci !!

Avec plaisir ! :wink: