optimisation requete SQL. GESTION DE STOCK LOCATION PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : optimisation requete SQL. GESTION DE STOCK LOCATION PHP

Re: optimisation requete SQL. GESTION DE STOCK LOCATION PHP

par woowoo » 13 déc. 2016, 11:17

Salut, j'ai pas forcement tout compris mais deja ton +3600 je ne suis pas forcement fan.
Si tu veux un nombre donnée pour une heure donnée, pourquoi ne pas faire un SELECT *, Hour(`tonchampdate`) ......... GROUP BY Hour(`tonchampdate`)

la ça te donnerai un dispatche de tes data par heures et ça évite un nombre important de requêtes, car au final ta boucle envoie une nouvelle requête pour chaque heures

optimisation requete SQL. GESTION DE STOCK LOCATION PHP

par maxmx » 12 déc. 2016, 16:05

je colle sur un problème .... depuis plusieurs mois.
ça fonctionne. c'est fiable. mais lent.

je ne parviens pas a trouver une alternative qui bouffe moins de ressource.
il s'agit d'un logiciel de gestion de stock de location.
je veux pouvoir voir à une plage de date (par exemple du 01/12/2016 au 20/12/2016) le matériel dispo

je simplifie ma BDD pour l'exemple :
TABLE PRODUITS :
produits_id, produits_reference

TABLE DOCUMENTS :
documents_id, datedebut, datefin

TABLE DOCUMENTS_LIGNES
lignes_id, documents_id, produits_id, lignes_quantite


SCRIPT PHP 1 simplifié, fonctionnel mais lent :
=> recherche du stock sortant pour 1 produits ($produits_id) sur une plage donnée ($datedebut à $datefin)
pour 1 produits donné il peut y en avoir 15 sorties le 01/12, 25 sorties 10/12 etc etc..
ceux qui m'interesse c'est donc la valeur maximale sortie sur une plage donnée

à savoir que mes tables peuvent avoir plusieurs millions de lignes.

// $datedebut est le debut de la plage qui m'interesse
// $datefin est la fin.
// on regarde la dispo de stock pour chaque heure pleine donc pour mon WHILE j'ajoute 3600 à chaque tour sur $datedebut

Code : Tout sélectionner

$qtmax = 0; while($datedebut <= $datefin) { $req_sortant = mysql_query(" SELECT SUM(lignes.lignes_quantite) as qtsortant FROM DOCUMENTS_LIGNES AS lignes JOIN DOCUMENTS AS documents on documents.documents_id = lignes.documents_id WHERE ".$datedebut." BETWEEN documents.datedebut AND documents.datefin AND lignes.produits_id = '".$produits_id."' AND lignes.lignes_quantite != 0 group by lignes.produits_id") or die (bug(343,mysql_error())); $sortant = mysql_fetch_array($req_sortant); if($qt[$datedebut] > $qtmax) { $qtmax = $qt[$datedebut]; } $datedebut = $datedebut + 3600; } echo $qtmax;


si quelqu'un arrive à m'aider ce serait dingue!

merci