Bonjour,
Je développe une module comptabilité. Je cherche à partir d'un n° de compte
quelconque retrouver à quelle classe il appartient.
A titre d'exemple, pour le compte client "41100001" je voudrais récupérer la
classe "411" si elle existe, sinon la classe 41 ou 4...
Pour arriver à ça, je boucle sur le compte en enlevant chaque fois le
dernier caractère, comme suit:
x = taille(COMPTE)
BOUCLE
SI x = 0 ALORS SORTIR
lCompte = Gauche(lCompte,x)
SQLExec("select from LIASSE where NUMCOMPTE = '" + lCompte + "'","ReqC")
SI SQLFetch("ReqC") = 0 alors
// Trouvé
...
FIN
x--
FIN
Ca fonctionne, mais ce n'est ni "élégant" ni optimal.
Connaissez vous une fonction "magique" sous MySQL 4.1 qui permette
d'optimiser ce code ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Firetox
Bonjour,
tout depend de ce tu veux reellement remonter avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select .......... liasse.numCompte from matable1 left join liasse on ( left(matable1.compte,3) = liasse.numCompte or left(matable1.compte,2) = liasse.numCompte or left(matable1.compte,1) = liasse.numCompte ) whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL si la taille du compte est superieure a 3 il faut ajouter des or
sinon au debut j'avais compris autre chose prendre le compte le plus grand si par exemple 411, 41, 4 existent en meme temps alors il faudra changer la requete et faire 3 jointures (les or seront remplacer par une jointure sur liasse et ensuite dans le select mettre des IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour chaque ligne de faire un autre select
Bon dev @+
Firetox
"I.G.LOG" a écrit dans le message de news: 48c9674b$0$908$
Bonjour, Je développe une module comptabilité. Je cherche à partir d'un n° de compte quelconque retrouver à quelle classe il appartient. A titre d'exemple, pour le compte client "41100001" je voudrais récupérer la classe "411" si elle existe, sinon la classe 41 ou 4... Pour arriver à ça, je boucle sur le compte en enlevant chaque fois le dernier caractère, comme suit:
x = taille(COMPTE) BOUCLE SI x = 0 ALORS SORTIR lCompte = Gauche(lCompte,x) SQLExec("select from LIASSE where NUMCOMPTE = '" + lCompte + "'","ReqC") SI SQLFetch("ReqC") = 0 alors // Trouvé ... FIN x-- FIN
Ca fonctionne, mais ce n'est ni "élégant" ni optimal. Connaissez vous une fonction "magique" sous MySQL 4.1 qui permette d'optimiser ce code ?
Merci à tous Bon dev.
Phil
Bonjour,
tout depend de ce tu veux reellement remonter
avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select ..........
liasse.numCompte
from matable1
left join liasse on
( left(matable1.compte,3) = liasse.numCompte
or left(matable1.compte,2) = liasse.numCompte
or left(matable1.compte,1) = liasse.numCompte )
whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si
il existe sinon 41 si il existe sinon 4 si il existe sinon NULL
si la taille du compte est superieure a 3 il faut ajouter des or
sinon au debut j'avais compris autre chose prendre le compte le plus grand
si par exemple 411, 41, 4 existent en meme temps
alors il faudra changer la requete et faire 3 jointures (les or seront
remplacer par une jointure sur liasse et ensuite dans le select mettre des
IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour
chaque ligne de faire un autre select
Bon dev
@+
Firetox
"I.G.LOG" <iglog@free.fr> a écrit dans le message de news:
48c9674b$0$908$ba4acef3@news.orange.fr...
Bonjour,
Je développe une module comptabilité. Je cherche à partir d'un n° de
compte quelconque retrouver à quelle classe il appartient.
A titre d'exemple, pour le compte client "41100001" je voudrais récupérer
la classe "411" si elle existe, sinon la classe 41 ou 4...
Pour arriver à ça, je boucle sur le compte en enlevant chaque fois le
dernier caractère, comme suit:
x = taille(COMPTE)
BOUCLE
SI x = 0 ALORS SORTIR
lCompte = Gauche(lCompte,x)
SQLExec("select from LIASSE where NUMCOMPTE = '" + lCompte +
"'","ReqC")
SI SQLFetch("ReqC") = 0 alors
// Trouvé
...
FIN
x--
FIN
Ca fonctionne, mais ce n'est ni "élégant" ni optimal.
Connaissez vous une fonction "magique" sous MySQL 4.1 qui permette
d'optimiser ce code ?
tout depend de ce tu veux reellement remonter avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select .......... liasse.numCompte from matable1 left join liasse on ( left(matable1.compte,3) = liasse.numCompte or left(matable1.compte,2) = liasse.numCompte or left(matable1.compte,1) = liasse.numCompte ) whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL si la taille du compte est superieure a 3 il faut ajouter des or
sinon au debut j'avais compris autre chose prendre le compte le plus grand si par exemple 411, 41, 4 existent en meme temps alors il faudra changer la requete et faire 3 jointures (les or seront remplacer par une jointure sur liasse et ensuite dans le select mettre des IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour chaque ligne de faire un autre select
Bon dev @+
Firetox
"I.G.LOG" a écrit dans le message de news: 48c9674b$0$908$
Bonjour, Je développe une module comptabilité. Je cherche à partir d'un n° de compte quelconque retrouver à quelle classe il appartient. A titre d'exemple, pour le compte client "41100001" je voudrais récupérer la classe "411" si elle existe, sinon la classe 41 ou 4... Pour arriver à ça, je boucle sur le compte en enlevant chaque fois le dernier caractère, comme suit:
x = taille(COMPTE) BOUCLE SI x = 0 ALORS SORTIR lCompte = Gauche(lCompte,x) SQLExec("select from LIASSE where NUMCOMPTE = '" + lCompte + "'","ReqC") SI SQLFetch("ReqC") = 0 alors // Trouvé ... FIN x-- FIN
Ca fonctionne, mais ce n'est ni "élégant" ni optimal. Connaissez vous une fonction "magique" sous MySQL 4.1 qui permette d'optimiser ce code ?
Merci à tous Bon dev.
Phil
Firetox
oui donc c'est la deuxieme j'avais bien vu si tu as un probleme je peux te la donner en fait une fois compris le mecanisme c'est simple a ecrire
bon dev @+
"I.G.LOG" a écrit dans le message de news: 48ca3985$0$898$
Bonjour
tout depend de ce tu veux reellement remonter avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select .......... liasse.numCompte from matable1 left join liasse on ( left(matable1.compte,3) = liasse.numCompte or left(matable1.compte,2) = liasse.numCompte or left(matable1.compte,1) = liasse.numCompte ) whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL si la taille du compte est superieure a 3 il faut ajouter des or
En fait je cherche à récupérer le compte le plus "approchant". Pour "4110001" je voudrais réupérer le compte qui se rapproche le plus, cad "411" si il existe, sinon "41" etc... Cette requete va me remonter n'importe lequel non ?
sinon au debut j'avais compris autre chose prendre le compte le plus grand si par exemple 411, 41, 4 existent en meme temps alors il faudra changer la requete et faire 3 jointures (les or seront remplacer par une jointure sur liasse et ensuite dans le select mettre des IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour chaque ligne de faire un autre select
Oui c'est bien ce que je cherche (récupérer le plus grand), c'est donc sur cette requete que je dois miser. Je vais essayer de la construire.
Merci beaucoup A+ Phil
oui donc c'est la deuxieme j'avais bien vu
si tu as un probleme je peux te la donner en fait une fois compris le
mecanisme c'est simple a ecrire
bon dev
@+
"I.G.LOG" <iglog@free.fr> a écrit dans le message de news:
48ca3985$0$898$ba4acef3@news.orange.fr...
Bonjour
tout depend de ce tu veux reellement remonter
avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select ..........
liasse.numCompte
from matable1
left join liasse on
( left(matable1.compte,3) = liasse.numCompte
or left(matable1.compte,2) = liasse.numCompte
or left(matable1.compte,1) = liasse.numCompte )
whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411
si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL
si la taille du compte est superieure a 3 il faut ajouter des or
En fait je cherche à récupérer le compte le plus "approchant".
Pour "4110001" je voudrais réupérer le compte qui se rapproche le plus,
cad "411" si il existe, sinon "41" etc...
Cette requete va me remonter n'importe lequel non ?
sinon au debut j'avais compris autre chose prendre le compte le plus
grand si par exemple 411, 41, 4 existent en meme temps
alors il faudra changer la requete et faire 3 jointures (les or seront
remplacer par une jointure sur liasse et ensuite dans le select mettre
des IF pour selectionner le plus important ou celui qui doit remonter en
premier
tu obtien ton info en meme temps que la requete de depart au lieu pour
chaque ligne de faire un autre select
Oui c'est bien ce que je cherche (récupérer le plus grand), c'est donc sur
cette requete que je dois miser.
Je vais essayer de la construire.
oui donc c'est la deuxieme j'avais bien vu si tu as un probleme je peux te la donner en fait une fois compris le mecanisme c'est simple a ecrire
bon dev @+
"I.G.LOG" a écrit dans le message de news: 48ca3985$0$898$
Bonjour
tout depend de ce tu veux reellement remonter avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select .......... liasse.numCompte from matable1 left join liasse on ( left(matable1.compte,3) = liasse.numCompte or left(matable1.compte,2) = liasse.numCompte or left(matable1.compte,1) = liasse.numCompte ) whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL si la taille du compte est superieure a 3 il faut ajouter des or
En fait je cherche à récupérer le compte le plus "approchant". Pour "4110001" je voudrais réupérer le compte qui se rapproche le plus, cad "411" si il existe, sinon "41" etc... Cette requete va me remonter n'importe lequel non ?
sinon au debut j'avais compris autre chose prendre le compte le plus grand si par exemple 411, 41, 4 existent en meme temps alors il faudra changer la requete et faire 3 jointures (les or seront remplacer par une jointure sur liasse et ensuite dans le select mettre des IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour chaque ligne de faire un autre select
Oui c'est bien ce que je cherche (récupérer le plus grand), c'est donc sur cette requete que je dois miser. Je vais essayer de la construire.
Merci beaucoup A+ Phil
I.G.LOG
Bonjour
tout depend de ce tu veux reellement remonter avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select .......... liasse.numCompte from matable1 left join liasse on ( left(matable1.compte,3) = liasse.numCompte or left(matable1.compte,2) = liasse.numCompte or left(matable1.compte,1) = liasse.numCompte ) whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL si la taille du compte est superieure a 3 il faut ajouter des or
En fait je cherche à récupérer le compte le plus "approchant". Pour "4110001" je voudrais réupérer le compte qui se rapproche le plus, cad "411" si il existe, sinon "41" etc... Cette requete va me remonter n'importe lequel non ?
sinon au debut j'avais compris autre chose prendre le compte le plus grand si par exemple 411, 41, 4 existent en meme temps alors il faudra changer la requete et faire 3 jointures (les or seront remplacer par une jointure sur liasse et ensuite dans le select mettre des IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour chaque ligne de faire un autre select
Oui c'est bien ce que je cherche (récupérer le plus grand), c'est donc sur cette requete que je dois miser. Je vais essayer de la construire.
Merci beaucoup A+ Phil
Bonjour
tout depend de ce tu veux reellement remonter
avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select ..........
liasse.numCompte
from matable1
left join liasse on
( left(matable1.compte,3) = liasse.numCompte
or left(matable1.compte,2) = liasse.numCompte
or left(matable1.compte,1) = liasse.numCompte )
whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411
si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL
si la taille du compte est superieure a 3 il faut ajouter des or
En fait je cherche à récupérer le compte le plus "approchant".
Pour "4110001" je voudrais réupérer le compte qui se rapproche le plus, cad
"411" si il existe, sinon "41" etc...
Cette requete va me remonter n'importe lequel non ?
sinon au debut j'avais compris autre chose prendre le compte le plus grand
si par exemple 411, 41, 4 existent en meme temps
alors il faudra changer la requete et faire 3 jointures (les or seront
remplacer par une jointure sur liasse et ensuite dans le select mettre des
IF pour selectionner le plus important ou celui qui doit remonter en
premier
tu obtien ton info en meme temps que la requete de depart au lieu pour
chaque ligne de faire un autre select
Oui c'est bien ce que je cherche (récupérer le plus grand), c'est donc sur
cette requete que je dois miser.
Je vais essayer de la construire.
tout depend de ce tu veux reellement remonter avec un left join sur liasse et des or tu devrais avoir ce que tu veux
select .......... liasse.numCompte from matable1 left join liasse on ( left(matable1.compte,3) = liasse.numCompte or left(matable1.compte,2) = liasse.numCompte or left(matable1.compte,1) = liasse.numCompte ) whre ......
ce qui aura pour effet de remonter le compte existant correspondant : 411 si il existe sinon 41 si il existe sinon 4 si il existe sinon NULL si la taille du compte est superieure a 3 il faut ajouter des or
En fait je cherche à récupérer le compte le plus "approchant". Pour "4110001" je voudrais réupérer le compte qui se rapproche le plus, cad "411" si il existe, sinon "41" etc... Cette requete va me remonter n'importe lequel non ?
sinon au debut j'avais compris autre chose prendre le compte le plus grand si par exemple 411, 41, 4 existent en meme temps alors il faudra changer la requete et faire 3 jointures (les or seront remplacer par une jointure sur liasse et ensuite dans le select mettre des IF pour selectionner le plus important ou celui qui doit remonter en premier
tu obtien ton info en meme temps que la requete de depart au lieu pour chaque ligne de faire un autre select
Oui c'est bien ce que je cherche (récupérer le plus grand), c'est donc sur cette requete que je dois miser. Je vais essayer de la construire.
Merci beaucoup A+ Phil
I.G.LOG
"Firetox" a écrit dans le message de news: 48ca3a98$0$16991$
oui donc c'est la deuxieme j'avais bien vu si tu as un probleme je peux te la donner en fait une fois compris le mecanisme c'est simple a ecrire
Je vais essayer de la mettre en place (faut bien que je fasse travailler un peu mes vieux neurones) Je te tiens au courant. Encore merci
"Firetox" <firetox@SQLManagerX.com> a écrit dans le message de news:
48ca3a98$0$16991$426a74cc@news.free.fr...
oui donc c'est la deuxieme j'avais bien vu
si tu as un probleme je peux te la donner en fait une fois compris le
mecanisme c'est simple a ecrire
Je vais essayer de la mettre en place (faut bien que je fasse travailler un
peu mes vieux neurones)
Je te tiens au courant.
Encore merci
"Firetox" a écrit dans le message de news: 48ca3a98$0$16991$
oui donc c'est la deuxieme j'avais bien vu si tu as un probleme je peux te la donner en fait une fois compris le mecanisme c'est simple a ecrire
Je vais essayer de la mettre en place (faut bien que je fasse travailler un peu mes vieux neurones) Je te tiens au courant. Encore merci
I.G.LOG
"Firetox" a écrit dans le message de news: 48ca3a98$0$16991$
oui donc c'est la deuxieme j'avais bien vu si tu as un probleme je peux te la donner en fait une fois compris le mecanisme c'est simple a ecrire
bon dev @+
Bonjour Firetox
J'ai cherché la méthode la plus simple pour rammener le plus grand compte. Voici ce que je fais: Je construit une chaine avec tous les comptes < compte et j'effectue la recherche avec la clause in, ordonné par compte descendant en récupérant le 1er (limit 1)
lCond est une chaîne lLong est un entier lId est un entier
// Recherche des codes liasse lCond = :mGet("COMPTE") lLong = Taille(:mGet("COMPTE")) BOUCLE lLong-- SI lLong = 0 ALORS SORTIR lCond += ("," + Gauche(lCond,lLong)) // me donne une chaine sous la forme "4110005,411000,41100,4110,411,41,4" FIN lCond = Milieu(lCond,2) // Enleve la 1ere virgule lCond = "select LIASSED,LIASSEC,COMPTE,IDCPTPLAN" +... " from cptplan" +... " where COMPTE in (" + lCond + ")" +... " order by compte desc limit 1" SI SQLExec(lCond,"ReqL") ALORS SI SQLFetch("ReqL") = 0 ALORS :mSet("LIASSED",SQLLitCol("ReqL",1)) :mSet("LIASSEC",SQLLitCol("ReqL",2)) lId = SQLLitCol("ReqL",4) FIN FIN SQLFerme("ReqL") RENVOYER lId
Est-ce la méthode la plus rapide ou il ya mieux ? J'avoue qu'avec des jointures j'ai des difficultés pour avoir le même résultat
Encore merci
"Firetox" <firetox@SQLManagerX.com> a écrit dans le message de news:
48ca3a98$0$16991$426a74cc@news.free.fr...
oui donc c'est la deuxieme j'avais bien vu
si tu as un probleme je peux te la donner en fait une fois compris le
mecanisme c'est simple a ecrire
bon dev
@+
Bonjour Firetox
J'ai cherché la méthode la plus simple pour rammener le plus grand compte.
Voici ce que je fais:
Je construit une chaine avec tous les comptes < compte et j'effectue la
recherche avec la clause in, ordonné par compte descendant en récupérant le
1er (limit 1)
lCond est une chaîne
lLong est un entier
lId est un entier
// Recherche des codes liasse
lCond = :mGet("COMPTE")
lLong = Taille(:mGet("COMPTE"))
BOUCLE
lLong--
SI lLong = 0 ALORS SORTIR
lCond += ("," + Gauche(lCond,lLong)) // me donne une chaine sous la
forme "4110005,411000,41100,4110,411,41,4"
FIN
lCond = Milieu(lCond,2) // Enleve la 1ere virgule
lCond = "select LIASSED,LIASSEC,COMPTE,IDCPTPLAN" +...
" from cptplan" +...
" where COMPTE in (" + lCond + ")" +...
" order by compte desc limit 1"
SI SQLExec(lCond,"ReqL") ALORS
SI SQLFetch("ReqL") = 0 ALORS
:mSet("LIASSED",SQLLitCol("ReqL",1))
:mSet("LIASSEC",SQLLitCol("ReqL",2))
lId = SQLLitCol("ReqL",4)
FIN
FIN
SQLFerme("ReqL")
RENVOYER lId
Est-ce la méthode la plus rapide ou il ya mieux ?
J'avoue qu'avec des jointures j'ai des difficultés pour avoir le même
résultat
"Firetox" a écrit dans le message de news: 48ca3a98$0$16991$
oui donc c'est la deuxieme j'avais bien vu si tu as un probleme je peux te la donner en fait une fois compris le mecanisme c'est simple a ecrire
bon dev @+
Bonjour Firetox
J'ai cherché la méthode la plus simple pour rammener le plus grand compte. Voici ce que je fais: Je construit une chaine avec tous les comptes < compte et j'effectue la recherche avec la clause in, ordonné par compte descendant en récupérant le 1er (limit 1)
lCond est une chaîne lLong est un entier lId est un entier
// Recherche des codes liasse lCond = :mGet("COMPTE") lLong = Taille(:mGet("COMPTE")) BOUCLE lLong-- SI lLong = 0 ALORS SORTIR lCond += ("," + Gauche(lCond,lLong)) // me donne une chaine sous la forme "4110005,411000,41100,4110,411,41,4" FIN lCond = Milieu(lCond,2) // Enleve la 1ere virgule lCond = "select LIASSED,LIASSEC,COMPTE,IDCPTPLAN" +... " from cptplan" +... " where COMPTE in (" + lCond + ")" +... " order by compte desc limit 1" SI SQLExec(lCond,"ReqL") ALORS SI SQLFetch("ReqL") = 0 ALORS :mSet("LIASSED",SQLLitCol("ReqL",1)) :mSet("LIASSEC",SQLLitCol("ReqL",2)) lId = SQLLitCol("ReqL",4) FIN FIN SQLFerme("ReqL") RENVOYER lId
Est-ce la méthode la plus rapide ou il ya mieux ? J'avoue qu'avec des jointures j'ai des difficultés pour avoir le même résultat