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...)
La requête CreationColonneMvt créé une colonne dans la table balanceentreprise
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 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
Partager