Optimiser requetes complexes

Fermé
dedeuzo Messages postés 1 Date d'inscription mercredi 26 août 2009 Statut Membre Dernière intervention 26 août 2009 - 26 août 2009 à 06:48
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 26 août 2009 à 10:25
Bonjour,

Pas un pro en mysql, je me heurte à un enorme probleme de requete...
Temps dépassé... requetes qui n'aboutissent pas... navigateur planté, etc
J'ai bien peur que la base que j'ai récupéré d'une ancienne société soit inexploitable.

J'y vois un challenge pour certaines pointures qui fréquentent ce site !

Mon probleme est le suivant :
J'ai 3 tables
- ARTICLES : avec 10 000 codes barre (ean) ( fichier ici : http://dedeuzo.free.fr/articles.sql )
- ENTREE : avec des codes barres, qui sont rentrés dans 2 etats (N ou B) et la quantité (plus date) ( fichier ici : http://dedeuzo.free.fr/entree.sql )
- SORTIE : avec des codes barres, qui sont rentrés dans 2 etats (N ou B) et la quantité (plus date)( fichier ici : http://dedeuzo.free.fr/articles.sql )

Le but du jeu est de faire une page PHP qui extirpe chaque code barre de ARTICLES (normalement il y a une colonne titre que j'ai retirée pour réduire le poid des fichiers ci-dessus) et doit aller compter le nombre d'exemplaire de la table ENTREE et lui soustraire ceux de la table SORTIE pour CHACUN etats N et B

je souhaite donc obtenir le nombre de ref en stock en NEUF et en OKKAZ pour chaque ref de la table ARTICLES
soit :
- code barre 0000000000000 de article = ( nbre de code barre de entree - nbre code barre de sortie = total en N)
- code barre 0000000000000 de article est donc en ( nbre de code barre de entree - nbre code barre de sortie = total en B)
code barre 0000000000001 de article est donc en ( nbre de code barre de entree - nbre code barre de sortie = total en N)
- code barre 0000000000001 de article est donc en ( nbre de code barre de entree - nbre code barre de sortie = total en B)
(etc... etc...)
- code barre 0123456789101 de article est donc en ( nbre de code barre de entree - nbre code barre de sortie = total en N)
- code barre 0123456789101 de article est donc en ( nbre de code barre de entree - nbre code barre de sortie = total en N)

ma requete actuelle est :

$query_ARTICLES_B = "
SELECT articles.ean, (IFNULL(achat.achat_sum, 0) - IFNULL( vente.vente_sum, 0)) AS InStock
FROM articles
LEFT JOIN ( SELECT entree.ean, SUM(qte) AS achat_sum, entree.etat AS entree_etat , entree.ts AS entree_ts FROM entree WHERE entree.etat = 'B' AND entree.ean NOT LIKE '%37600068%' GROUP BY entree.ean )
AS achat ON achat.ean=articles.ean
LEFT JOIN ( SELECT sortie.ean, SUM(qte) AS vente_sum, sortie.etat AS sortie_etat , sortie.ts AS sortie_ts FROM sortie WHERE sortie.etat = 'B' AND sortie.ean NOT LIKE '%37600068%' GROUP BY sortie.ean )
AS vente ON articles.ean=vente.ean
WHERE achat.ean=articles.ean
ORDER BY articles.ean ";

(j'y ai passé 3 jours !!! après, pour ce qui est des autres manips PHP, là ça roule)

mais plus rien ne s'affiche sur mon wamp (temps depassé) et c'est de plus en plus long et n'arrive pas au bout 1 fois sur 2 en ligne chez free...

Mais là, devant la base qui ne cesse de grandir, j'ai bien peur de ne pas savoir comment optimiser cà !
Je ne peux pas lâcher mon pote sur ce coup là, il ne peux pas faire appel à un pro au vu de l'état de sa boite...

Bref : CCM est sans doute ma dernière chance. Par avance merci à vous tous pour vos pistes, conseils, liens ou même solutions !!!!
Cordialement.
A voir également:

1 réponse

pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
26 août 2009 à 10:25
Hello !

Va voir par ici, je pense que ça pourrait t'aider : https://forums.commentcamarche.net/forum/affich-14077640-optimisation-du-code-php#1
0