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 :

temps infini pour une requête avec jointure [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Par défaut temps infini pour une requête avec jointure
    Bonjour

    j'ai tenté la requête ci-dessous un Update avec une jointure sur une autre table, je ne comprends pas que ce soit avec un fichier php ou adapté à PhpMyAdmin la requête tourne sans donner de résultat.
    calcul du nombre de score supérieur dans la table des "donnes_players" à un score défini de la table "classement_donne"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //mise à jour du NScoreSup dans classement_donne pour la donne 1
    $sql="UPDATE classement_donne AS cl
    INNER JOIN donnes_players AS dp
    ON dp.id_donnes=cl.id_donnes 
    SET NscoreSup=(SELECT COUNT(score) FROM donnes_players WHERE  dp.score>cl.score AND dp.id_donnes=cl.id_donnes)";
     
    $connexion->query($sql);
    par contre j'ai réalisé ce que je voulais avec des requêtes différentes là il faut 2 secondes pour mettre à jour(avec les affichages qui me permettent de contrôler)
    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
    $sql="SELECT DISTINCT id_donnes FROM classement_donne";
    	$rep=$connexion->query($sql);
    	while ($donnees = $rep->fetch()){
    		echo 'id_donnes : '.$donnees['id_donnes']. '<br />';
    		$sql2="SELECT score FROM classement_donne WHERE id_donnes = ".$donnees['id_donnes'];
    			$rep2=$connexion->query($sql2);
    			while ($donnees2 = $rep2->fetch()){
    				echo 'score : '.$donnees2['score']. '<br />';
    				$sql3="SELECT COUNT(score)AS NBscoreSup FROM donnes_players WHERE  score>".$donnees2['score']." AND id_donnes=".$donnees['id_donnes'];
    					$rep3=$connexion->query($sql3);
    					while ($donnees3 = $rep3->fetch()){
    						echo 'NBscoreSup : '.$donnees3['NBscoreSup']. '<br />';
    						$sql4="UPDATE classement_donne SET NscoreSup =".$donnees3['NBscoreSup']." WHERE  score=".$donnees2['score']." AND id_donnes=".$donnees['id_donnes'];
     
    						$connexion->query($sql4);
     
    					}
    			}
    	}

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ...Update avec une jointure sur une autre table...
    La jointure me semble mal placée.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(score) FROM donnes_players WHERE  dp.score>cl.score AND dp.id_donnes=cl.id_donnes
    A priori, cette partie est indépendante du reste de la requête. Or, il y manque des infos.

    Je ne suis pas sûr d'avoir tout capté, mais tente ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "UPDATE classement_donne AS cl1
    	SET NscoreSup = (SELECT COUNT(score)
    		FROM donnes_players AS dp2
    		INNER JOIN classement_donne AS cl2
    		ON dp2.id_donnes = cl2.id_donnes 
    		WHERE dp2.score>cl2.score AND dp2.id_donnes=cl2.id_donnes)
    	";
    Dernière modification par rawsrc ; 21/05/2017 à 14h19.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Par défaut
    Bonsoir , je te remercie pour cette réponse

    malheureusement j'ai un message d'erreur
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'score' in field list is ambiguous' in C:\xampp\htdocs\testPHP\Bridgez\BaseDonnee\MiseAjourScorePlus_ClassementDonne.php:60 Stack trace: #0
    j'ai repris intégralement ton code

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Le message d'erreur est limpide, il ne sait pas sur quel score il doit faire le COUNT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SET NscoreSup = (SELECT COUNT(score)
    Il ne sait pas dans quelle table prendre le score :donnes_players AS dp2 ou classement_donne AS cl2

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Par défaut
    Il ne sait pas dans quelle table prendre le score :donnes_players AS dp2 ou classement_donne AS cl2
    pour moi c'est évident
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (SELECT COUNT(score)
    		FROM donnes_players AS dp2
    moi je traduis comme ceci : compter les "score" de la table "donnes_players" alias "dp2"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE dp2.score>cl2.score
    compter les score de dp2 où ils sont supérieurs au score de la table "classement_donne" alias cl2 qu'on retrouve avec la jointure entre les deux tables où elles ont toutes les deux le même "id_donne"

  6. #6
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Ton problème se trouve dans ta sous-requête (SELECT) tes tables n'ont pas des alias. d'un cpoup dp et cl ne sont pas pris en compte.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //mise à jour du NScoreSup dans classement_donne pour la donne 1$sql="UPDATE classement_donne AS cl
    INNER JOIN donnes_players AS dp
    ON dp.id_donnes=cl.id_donnes 
    SET NscoreSup=(SELECT COUNT(score) FROM donnes_players AS dp, classement_donne AS cl WHERE  dp.score>cl.score AND dp.id_donnes=cl.id_donnes)";  $connexion->query($sql);

  7. #7
    Membre chevronné
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //mise à jour du NScoreSup dans classement_donne pour la donne 1
    $sql = "UPDATE classement_donne AS cl
        SET NscoreSup = (SELECT COUNT(score)
            FROM donnes_players AS dp
    INNER JOIN donnes_players AS dp
    ON dp.id_donnes=cl.id_donnes 
    SET NscoreSup=(SELECT COUNT(score) FROM donnes_players AS dp, classement_donne AS cl WHERE  dp.score>cl.score AND dp.id_donnes=cl.id_donnes)"; 
     $connexion->query($sql);

    Qu'est ce que ça donne @marco62118?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Demande d'aide pour une requête avec jointure
    Par marcoxavier dans le forum Développement
    Réponses: 8
    Dernier message: 26/05/2015, 16h04
  2. Réponses: 11
    Dernier message: 15/09/2008, 10h25
  3. [MySQL] Cherche aide pour une requete avec jointure
    Par nasbe26 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/09/2007, 11h44
  4. [ABAP] Comment créer une requête avec jointure
    Par roadster62 dans le forum SAP
    Réponses: 1
    Dernier message: 21/02/2006, 16h04
  5. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45

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