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

Requêtes MySQL Discussion :

Requête qui ne fonctionne pas


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Points : 82
    Points
    82
    Par défaut Requête qui ne fonctionne pas
    Bonsoir à tous,

    Pour bien expliquer le problème voici la structure de mes bases:

    Table1 : balanceentreprise

    Compte int(6) non NULL
    Libellé varchar(20)
    Solde decimal(12,2)

    exemple : 101000 | Client X | -360000,00

    Table2: coderegroupement
    Compte int(6) non NULL
    Debit char(2)
    Credit char(2)

    exemple : 106300 | ZS | XM

    Sachant que le compte dans balanceentreprise n'est pas forcément présent dans coderegroupement, j'ai besoin d'aller rechercher l'inférieur immédiat. Hors j'ai l'impression que la requête suivante ne fonctionne pas correctement : (ya du php avec... au cas où ce serait mon code...)

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    //on se connecte à la base de données
    /*si erreur alors on a un message d'erreur
    sinon on execute la requete de modification de la table balance*/
     
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=balance1', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    echo "Connexion etablie";
     
    //preparation des requêtes
    $CreationColonneMvt = $bdd->prepare('ALTER TABLE balanceentreprise ADD Mvt Varchar(2) NULL');
    $SelectCompte = $bdd->prepare('SELECT * FROM balanceentreprise');
    $RemplissageBase = $bdd->prepare('UPDATE balanceentreprise SET Mvt = ? WHERE Compte = ? ');
    $ValeurMvt = $bdd->prepare('SELECT CodeRegroupement.Comptes, IF(balanceentreprise.Solde > 0, Coderegroupement.Credit, Coderegroupement.Debit) 
    AS valeur
    FROM Coderegroupement
    INNER JOIN Balanceentreprise ON Coderegroupement.Comptes = Balanceentreprise.Compte
    WHERE Coderegroupement.Comptes <= ?
    ORDER BY Coderegroupement.Comptes DESC
    LIMIT 1');
     
    //On créé la table
    $CreationColonneMvt->execute();
     
    //on remplit la base
    $SelectCompte->execute();
     
    while($data = $SelectCompte->fetch())
    {
    		//on récupère la valeur du Mvt
    		$ValeurMvt->execute(array($data['Compte']));
     
    		while ($data2 = $ValeurMvt->fetch())
    		{
    				$CodeMvt = $data2['valeur'];
    		}
     
    		// on remplit la BD avec le code mouvement
    		$RemplissageBase->execute(array($CodeMvt, $data['Compte']));
     
    }
    $bdd->closeCursor();?>
    La requête CreationColonneMvt créé une colonne dans la table balanceentreprise

    La requête SelectCompte permet de lister la totalité des comptes présents dans la balanceentreprise pour ensuite aller alimenter la requête ValeurMvt.
    Enfin, pour terminer, la requête RemplissageBase remplit effectivement la table balanceentreprise.

    Ici le pb, c'est que d'une part : desfois, la requête ne prend pas en compte les numéros de compte. Par exemple, desfois, je me retrouve avec un mvt NULL car il ne trouve pas le compte. comme je l'ai dit, Sachant que le compte dans balanceentreprise n'est pas forcément présent, je vais rechercher le compte immédiatement inférieur. Donc, il ne devrait jamais y avoir de NULL...

    2e chose, desfois, ça ne prend pas le compte immédiatement inférieur mais le compte encore avant... et du coup, ya des décalages. donc je pense qu'il doit y avoir une erreur dans mes requêtes, mais je n'y vois plus grand chose a force d'avoir le nez de dans...

    J'espère que je n'ai pas été trop long... et que je suis clair...

    D'avance merci à ceux qui prendront le temps de me lire et/ou de me répondre...

    Bonne soirée à tous,

    Thibaut

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    J'ai quelques remarques :
    Ce code ne peut être exécuté qu'une seule fois si j'en juge par la requête ALTER TABLE qui ajoute une colonne mvt à la table balanceentreprise dont je ne vois pas trop l'utilité au demeurant..
    Concernant le SELECT *, je te recommande cette lecture.
    Enfin dans le cas où Coderegroupement.Comptes <= array($data['Compte']) ne retourne rien, que crois-tu qu'il se passe ?

  3. #3
    Membre régulier
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Points : 82
    Points
    82
    Par défaut
    Hello,

    Tout d'abord merci pour la rapidité de la réponse.

    Pour répondre à tes remarques :

    1) En fait on me donne une extraction d'une table à laquelle il faut que je rajoute une colonne (la colonne Mvt). Cependant, j'ai automatisé cette tâche puisqu'il m'arrive d'avoir plusieurs extractions dans la journée... donc autant le réaliser de manière automatique, cela va plus vite. Mais oui, cette requête n'est fait qu'une fois sur chaque nouvelle extraction que l'on m'envoie.

    2) J'ai lu avec intérêt l'article sur le SELECT * et j'ai bien aimé l'assimilation au chariot que l'on remplit pour au final ne prendre que 10 articles... ça m'a fait sourire... je vais donc modifier cela tout de suite pour optimiser un peu le code

    3) si Coderegroupement.Comptes <= array($data['Compte']) ne renvoit rien, je pense qu'il y aura null... il faut donc que je recherche mon erreur de ce coté, c'est bien ça ?

    Merci pour les précisions, je vais d'ores et déjà modifier mon code pour l'optimiser et rechercher ensuite la cause de mon problème.

    A+

    Thibaut

  4. #4
    Membre régulier
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Points : 82
    Points
    82
    Par défaut
    ReBonjour,

    1) j'ai remplacé ma requête SELECT * ... ça, c'est OK.

    2) Pour répondre à ta phrase :

    Enfin dans le cas où Coderegroupement.Comptes <= array($data['Compte']) ne retourne rien, que crois-tu qu'il se passe ?
    Etant donné que Compte est non NULL, il ne peut pas rien retourner. J'ai vérifié manuellement en faisant des echo, $data['Compte'] renvoi toujours une valeur... donc logiquement cela devrait coller... mais non...

    Quelqu'un d'autre aurait une supposition ?

    D'avance merci à tous !

    A bientôt,

    Thibaut

  5. #5
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Ce n'est pas parce que array($data['Compte']) contient toujours une valeur que cette valeur aura forcémént une correspondance égale ou inférieure à elle dans Coderegroupement.Comptes.

  6. #6
    Membre régulier
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Points : 82
    Points
    82
    Par défaut
    Ok, j'ai compris... voici la ligne de la requête qui bloqué... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INNER JOIN Balanceentreprise ON Coderegroupement.Comptes <= Balanceentreprise.Compte
    c'était <= à la place du =...

    Grand merci de m'avoir aiguillé... maintenant cette requête fonctionne.... et me renvoie bien tous les résultats comme il faut...

    A+

    Thibaut

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

Discussions similaires

  1. [MySQL] Requête qui ne fonctionne pas
    Par lelandais1 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 28/03/2010, 15h15
  2. Réponses: 3
    Dernier message: 28/08/2009, 13h30
  3. Filtrage au niveau de la requête qui ne fonctionne pas comme prévu
    Par hartecel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/06/2008, 14h06
  4. Requête qui ne fonctionne pas
    Par gregory.bts dans le forum JDBC
    Réponses: 1
    Dernier message: 10/06/2007, 01h11
  5. [SQL] requête qui ne fonctionne pas
    Par marie4449 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/03/2007, 16h47

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