IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Construction d'une requête


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut Construction d'une requête
    Salut, j'ai un script qui fonctionne mais que je voudrais améliorer.
    A la base, j'ai un concours. Il y a 3 questions (1 point par bonne réponses). Le vainqueur est tiré au sort aléatoirement parmi ceux qui ont les 3 bonnes réponses.

    Actuellement, voilà comment je procede.
    Je selectionne les réponses qui valent 1 point pour le concours en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    $req="SELECT DISTINCT idREPONSE FROM concours,questions,reponse
    						WHERE idconcours='$idconc' 
    						AND idconcours=concours_idconcours 
    						AND QUESTIONS_idQUESTIONS=idQUESTIONS
    						AND valeur_rep=1 						
    				";
    				$query=mysql_query($req);
    				//envoi dans la BDD
    					if (!$query)
    					{
    						?>
     
    						<br />
    						Erreur lors de la s&eacute;lection des bonnes réponses!
    						<?php
    						echo mysql_error();
    					}
    					else
    					{
    						while($res=mysql_fetch_array($query))
    						{
    							echo $res[0]
    							?>
    							<br />
    							<?php
    						}
    			   		}
    Ensuite, je copie/colle la requete me permettant de selectionner le vainqueur. La voila

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    			SELECT membre_idmembre,COUNT(*)
    			FROM (
     
    			SELECT DISTINCT membre_idmembre
    			FROM resultat, reponse
    			WHERE idREPONSE = REPONSE_idREPONSE
    			AND reponse_idreponse =xx
    			AND valeur_rep =1
    			UNION ALL SELECT DISTINCT membre_idmembre
    			FROM resultat, reponse
    			WHERE idREPONSE = REPONSE_idREPONSE
    			AND reponse_idreponse =xx
    			AND valeur_rep =1
    			UNION ALL SELECT DISTINCT membre_idmembre
    			FROM resultat, reponse
    			WHERE idREPONSE = REPONSE_idREPONSE
    			AND reponse_idreponse =xx
    			AND valeur_rep =1
    			) AS Tabx
    			GROUP BY membre_idmembre
    			HAVING count(*) =3
    			ORDER By rand() LIMIT 1

    Je remplace les xx par les réponses obtenues plus haut.
    Je cherche un moyen de ne plus faire çà "à la main". Je voudrais que la 2eme requete contiennent déjà les bons identifiants pour qu'ensuite, je fasse la requete dans la foulée.
    Je penses à la concatenation mais j'y arrive pas.

    Quelqu'un aurai-il une idée ??

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Si tu donnais la structure de tes tables, ce serait peut-être plus simple.

  3. #3
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    Voila la structure de mes tables



    merci de ton aide

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Sans jeu d'essai, ce n'est pas facile, mais est-ce qu'un truc comme ça ne peut pas fonctionner ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select membre.nom, 
           resultat.id_reponse, 
           sum(reponse.valeur_rep) as total
    from membre
    join resultat on membre.id = resultat.id_membre
    join reponse on resultat.id_reponse = reponse.id
    join question on reponse.id_question = question.id
    where question.id_concours = 1
    group by membre.id, reponse.id_question
    having total = 3
    order by rand()
    limit 1
    Sinon, si tu peux me donner un jeu d'essai, je peux tester, car je pense que ça doit pouvoir se faire avec une seule requête.

  5. #5
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    merci pour ta réponse masi çà passe pas.
    Il ne me sort aucun résultat (bien que la requête à l'air correcte)

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Je me suis fait un jeu d'essai avec :
    • 3 membres,
    • 6 questions avec pour chacunes :
      • 3 réponses possibles,
      • dont 1 réponse correcte.
    • 3 résultats par membre ,
      • 2 membres avec 3 résultats corrects
      • 1 membre avec 2 résultats corrects


    Cette requête me retourne bien, aléatoirement, l'un des 2 membres ayant 3 résultats corrects.

Discussions similaires

  1. Construction d'une requête un peu complexe
    Par dauphin34000 dans le forum SQL
    Réponses: 9
    Dernier message: 24/05/2007, 11h43
  2. [MySQL] Erreur lors de la construction d'une requête
    Par gaetan24 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 06/04/2007, 15h45
  3. Réponses: 1
    Dernier message: 14/02/2007, 15h51
  4. [Conception] Construction d'une requête
    Par enidnalb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/12/2006, 08h59
  5. Construction d'une requête imbriquée
    Par gudul dans le forum SQL
    Réponses: 20
    Dernier message: 03/07/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo