Pb Requete SQL !!!!

Mammouth du PHP | 19672 Messages

13 mars 2006, 22:25

C'est précisément ce que j'ai essayé de faire en concaténant les deux requêtes et je fais une double auto-jointure pour avoir les acceptés d'un coté et les refusés de l'autre :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

13 mars 2006, 22:26

on s'y rapproche je pense !!!
la j'ai bien tous les vendeurs, mais le compte n'est toujours pas bon ! par ex : 476 pourun vendeur alors que je n'ai que 70 lignes a tout casser ... :s

Eléphanteau du PHP | 19 Messages

13 mars 2006, 22:30

oui et non ??!!
parce que la on continue de faire les 'comptes'
l'idée que j'ai :

dossier accepté, R1 :

Code : Tout sélectionner

SELECT finance.BA, finance.vendeur, Count(finance.BA) AS ACCEPTES FROM finance WHERE finance.date=Date() AND finance.NumCarte Not IN (SELECT * FROM ACTIVITE) AND finance.NumAuto Not IN (SELECT * FROM AUTO) GROUP BY finance.BA, finance.vendeur, finance.date;



dossier refusé, R2 :

Code : Tout sélectionner

SELECT finance.BA, finance.vendeur, Count(finance.BA) AS REFUSES FROM finance WHERE finance.date=Date() AND finance.NumAuto IN (SELECT * FROM AUTO) GROUP BY finance.BA, finance.vendeur, finance.date;


SOLUTION, R3 :

Code : Tout sélectionner

SELECT BA, vendeur, acceptes, refuses FROM finance, R1, R2 Group by Ba; vendeur;
ca serait qlq chose qui y ressemblerait ??
est ce que c'est possible ??? :roll:

Mammouth du PHP | 19672 Messages

13 mars 2006, 23:03

on s'y rapproche je pense !!!
la j'ai bien tous les vendeurs, mais le compte n'est toujours pas bon ! par ex : 476 pourun vendeur alors que je n'ai que 70 lignes a tout casser ... :s
Bon attends, ça veut dire que j'ai dû oublier d'écarter un truc dans la requête.

Pas évident, mais à mon avis c'est la voie à suivre, sauf que là, je suis dans l'abstrait total. Faut que j'y réfléchisse un moment...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

13 mars 2006, 23:08

Nouvel essai :

Code : Tout sélectionner

SELECT f1.BA, f1.vendeur, Count(f2.BA) AS ACCEPTES, Count(f3.BA) AS REFUSES FROM finance AS f1 LEFT JOIN finance AS f2 ON f1.vendeur = f2.vendeur, LEFT JOIN finance AS f3 ON f1.vendeur = f3.vendeur, WHERE ((f2.date = Date() AND (f2.NumCarte Not IN (SELECT * FROM ACTIVITE) AND f2.NumAuto Not IN (SELECT * FROM AUTO))) OR (f3.date = Date() AND f3.NumAuto IN (SELECT * FROM AUTO))) GROUP BY f1.BA, f1.vendeur, f2.date, f3.date;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

13 mars 2006, 23:22

non non ca ne change rien !!! tu as juste modifié la place des dates, et moi dans le code je les supprime :
cependant je modifie un peu ton code a chaque fois (pcq je n'ai pas d'enregistrement à la date d'aujourd'hui) et pcq access n'aime pas les double jointure comme tu les écris ( je ne les avais jamais vu avant, donc je ne connait moi meme pas la synthaxe !)

ca donne ceci :

Code : Tout sélectionner

SELECT f1.BA, f1.vendeur, Count(f2.BA) AS ACCEPTES, Count(f3.BA) AS REFUSES FROM (finance AS f1 LEFT JOIN finance AS f2 ON f1.vendeur = f2.vendeur) LEFT JOIN finance AS f3 ON f1.vendeur = f3.vendeur WHERE (((f2.NumCarte Not IN (SELECT * FROM ACTIVITE) AND f2.NumAuto Not IN (SELECT * FROM AUTO))) OR (f3.NumAuto IN (SELECT * FROM AUTO))) GROUP BY f1.BA, f1.vendeur;
qu'en penses tu ?
mettrais tu les parentheses autrement ??? (pour les 'JOIN')

Mammouth du PHP | 19672 Messages

13 mars 2006, 23:30

Il faut suivre une logique dans les jointures : mais là, j'arrive au bout de mes possibilités, il me faudrait un jeu d'essai pour tester en local, dans l'abstraction totale, je trouve pas d'autre idée.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

14 mars 2006, 11:42

je peux t'envoyer le fichier, mais ca reste assez lourd : 1.7 Mo ???
j'ai supprimé tout ce dont tu n'avais pas besoin, mais je n'arrive pas a faire plus ...

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 mars 2006, 14:22

access n'aime pas les double jointure comme tu les écris ( je ne les avais jamais vu avant, donc je ne connait moi meme pas la synthaxe !)
C'est parce qu'avant la version 5.0.1, MySQL avait pour habitude de grouper toutes les jointures sur la gauche, donc "a LEFT JOIN b LEFT JOIN c" était interprété comme "(a LEFT JOIN b) LEFT JOIN c", donc ton interprétation des parenthèse semble être la bonne.

[ Syntaxe de JOIN (MySQL) ]
[ Nested Join Optimization (MySQL) ]

Eléphanteau du PHP | 19 Messages

14 mars 2006, 14:29

merci pour l'info !!!!

cependant le résultat que la requete retourne est faux !!! comme je disais j'ai un compte a 476, alors que j'ai à peine 70 lignes ....
:s

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 mars 2006, 14:30

Au fait, j'ai oublié de te demander si tu contrôlais la structure de la base ? Parce que je pense que tes problèmes de requêtes pourrait être plus facilement résolu si tu changeais certaines choses.

PS: toute ma sympathie pour l'ami Cyrano qui doit s'arracher les cheveux en essayant de debugger du Access à distance :lol:

Eléphanteau du PHP | 19 Messages

14 mars 2006, 14:35

qu'appelles tu 'controler la structure de la base' ??

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 mars 2006, 14:38

Est-ce que tu peux la modifier c'est le boulot de quelqu'un d'autre, ou la base est utilisé par un autre logiciel que tu ne contrôles pas.

Eléphanteau du PHP | 19 Messages

14 mars 2006, 14:48

non non je peux modifier la base. et il n'y a pas d'autre logiciel qui s'en sert. tout passe seulement par access (saisi, stat, ....) je n'ai pas d'interface ni rien.
cependant comme je l'expliquais a Cyrano, mes collegues ont deja du mal a sy adapter, alors que les informations qui sont demandées sont les même que ce qu'ils faisaient avant. donc je me vois mal, rajouter une colonne avec un booléen pour définir le statut d'un dossier :s

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 mars 2006, 15:01

Et sinon, ils s'adaptent bien au fait que ça ne fonctionne pas ? :lol:

Blague à part, (quoique...) je ne comprends pas pourquoi NumAuto et NumCarte peuvent être soit des numéros soit des attributs, et si tu pouvais "normaliser" la chose ce serait sûrement une épine de moins dans ton pied. Tu n'as pas envie de remplacer un système bancal par un autre système bancal. Au fait... c'est quoi un attribut ?