* Bonjour, *
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 : 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 $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
Partager