IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation de requêtes [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut Optimisation de requêtes
    Bonjour !

    J'ai un énorme soucis avec un code. Je souhaite l'optimiser pour qu'il prenne moins de temps, mais je n'y connais pas grand chose en SQL
    Regardez cette usine à gaz :

    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
     
    // Compte le nombre de personnes qui possèdent plus d'un pc.
    			$result6 = mysql_query("SELECT NOM,PRENOM FROM ".$T_factur." GROUP BY NOM, PRENOM");
    			while($row6 = mysql_fetch_object($result6)) 
    			{
    				$total++;
    				$nom=$row6->NOM;
    				$prenom=$row6->PRENOM;
    				$result7 = mysql_query("SELECT COUNT(NOM) as TOTAL FROM ".$T_factur." WHERE NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1006' OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1001' OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1017'  OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1019'");
    				while($row7 = mysql_fetch_object($result7)) 
    				{
    					$nombre=$row7->TOTAL;
    				}
    				if($nombre>1)
    				{
    					$nb_employes++;
    				}
    			}
    En gros, cette petite suite de lignes de code doit me sortir le nombre d'employés pour lesquel, dans une facturation, on retrouve les références W1017, W1001, W1019, W1006 plus d'une fois ( Exemple, deux fois W1017 ou une fois W1001 et une fois W1019 ... )

    La structure de la base est pas très claire mais malheureusement je ne peux pas la modifier, je reprends du code

    Quelqu'un a une idée concernant cette optimisation ? J'imagine qu'il est possible de sortir ce résultat en une requête mais je ne vois pas comment.

    Bien cordialement.

  2. #2
    Membre très actif
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut optimisation
    salut, je pense que ton code n'est commenté suffisament,
    apparement il s'agit d'une seule table sur laquelle tu fais tes operations(permet moi de te tutoiyer),
    alors si c'est le cas, pourquoi ne pas faire une requete de la sorte:
    "select count(*) from table where nom like $a and prenom like $b and code_produit=$c"?
    et si j'ai mal compris, faut mieux expliquer la structure de la table, comment ton code

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Par défaut
    Salut
    Pourquoi tu rajoutes pas le groupe by dans ta deuxième requête?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result7 = mysql_query("SELECT COUNT(NOM) as TOTAL FROM ".$T_factur." WHERE NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1006' OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1001' OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1017'  OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1019 GROUP BY NOM,PRENOM'");

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bien sûr que tu peux me tutoyer, je suis un petit jeune :p

    Desolé, je vais mieux m'expliquer.

    J'ai une table qui contient des facturations ( $T_factur ici )
    Elle possède une liste de champs, dont les suivants :

    NOM
    PRENOM
    CODE_PRODUIT_CATALOGUE

    Les enregistrements sont du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NOM | PRENOM | CODE_PRODUIT_CATALOGUE
    KEKE | Robert | W1011
    KEKE | Robert | W1019
    TARTE | Tatin | W1011
    TARTE | Tatin | XA343
    JACQUES | Jean | W1017
    TROP | Thierry | W1011
    TROP | Thierry | W1019
    Le code, comme je l'ai écrit, me sors le nombre d'employés qui possèdent plusieurs enregistrements avec les codes W1019, W1011 ou W1017.
    Dans l'exemple j'aurais donc 2 ( KEKE Robert et TROP Thierry )

    Voici le code un peu plus commenté.

    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
     
    			// Compte le nombre de personnes qui possèdent plus d'un pc.
    			// On selectionne les noms en eliminant les doublons de la selection
    			$result6 = mysql_query("SELECT NOM,PRENOM FROM ".$T_factur." GROUP BY NOM, PRENOM");
    			while($row6 = mysql_fetch_object($result6)) 
    			{
    				$nom=$row6->NOM;
    				$prenom=$row6->PRENOM;
    				// Pour chaque nom, on compte le nombre d'enregistrements ou le code_produit_catalogue est d'un ordinateur.
    				$result7 = mysql_query("SELECT COUNT(NOM) as TOTAL FROM ".$T_factur." WHERE NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1006' OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1001' OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1017'  OR NOM LIKE '".$nom."' AND PRENOM LIKE '".$prenom."' AND CODE_PRODUIT_CATALOGUE LIKE 'W1019'");
    				while($row7 = mysql_fetch_object($result7)) 
    				{
    					$nombre=$row7->TOTAL;
    				}
    				if($nombre>1)
    				{
    					// Si le nombre de matériel est supérieur à 1, on incremente.
    					$nb_employes++;
    				}
    			}
    Est-ce plus compréhensible ?

    @dinde : Si je fait le groupe by dans cette requete, etant donné qu'il y a plusieurs facturation au même nom, j'obtiendrais une seule ligne par personne et je ne pourrais pas compter le nombre de facturations, non ? Je sais pas vraiment en fait ^^'

    Bien cordialement.

  5. #5
    Membre éclairé Avatar de TrEiZe85
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Si j'ai tout compris, pour avoir le nombre d'employés pour lesquel, dans une facturation, on retrouve les références W1017, W1001, W1019, W1006 plus d'une fois....

    La requête doit grosso modo ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     
    SELECT COUNT(DISTINCT(NOM)) FROM(
     
    SELECT CODE_PRODUIT,NOM,COUNT(CODE_PRODUIT) AS NB_PRODUIT 
    FROM `test` 
    WHERE CODE_PRODUIT LIKE 'W1019' OR CODE_PRODUIT LIKE 'W1011' 
    GROUP BY NOM,CODE_PRODUIT
     
    ) AS RESULT WHERE NB_PRODUIT > 1
    Dans la clause WHERE ajoute les produit dont tu a besoin... Pour optimiser tout ca un petit index sur CODE_PRODUIT serait pas mal selon la volumetrie de ta table !

    J'avoue que la requête imbriquée ne fait pas trop propre mais bon...

  6. #6
    Membre expérimenté Avatar de BlackSmith
    Inscrit en
    Mars 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2008
    Messages : 181
    Par défaut
    Bonjour,

    tu peux déjà commencer par mettre des parenthèse dans ta clause where pour bien séparer les AND et les OR, ensuite tu peux mettre = à la place de like pour le code produit si tu n'utilise pas de % dans la valeur

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Merci pour toutes ces informations ( désolé du temps de réponse mais j'ai eu un week end un peu long :p )

    Je vais tester cette requête et voir si le temps d'execution s'en voit amélioré ou non !!

    Bien cordialement.

    EDIT : En fait, ce nombre d'employés m'intéresse grandement mais pas seulement.

    Je désire aussi afficher le nom et prénom d'un employé dont le nombre de références est supérieur à 1

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NOM | PRENOM | NOMBRE DE REF.
    TATIN |TARTE | 3
    ROBERT | CLAUDE | 2
    GEORGES | JACQUES | 5
    etc ...
    Désolé, je ne suis pas assez clair dans mes explications

  8. #8
    Membre chevronné
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Si ca vous interesse d'avoir la même requête sans requête dérivée voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(id) as compt,concat(nom,',',prenom) as name FROM `test`where code='W1019' OR code='W1011'  group by name having compt>1
    Le like ne servant à rien si on n'en tire pas parti avec %.
    EDIT: la requête prends en compe ta dernière demande

    Bonne continuation

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    La volume de données de la table est d'environ de 1000 à 3000 enregistrements ( cela varie suivant les mois, en fait ).

    Du coup, il faut que je fasse un group by sur le couple NOM/PRENOM non ? En effet, j'ai des personnes qui portent le même nom dans la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ROBERT Claude
    ROBERT Jean-Louis
    par exemple.

    Avant d'essayer de placer les colonnes de nom et prenom en face du nombre d'enregistrements, je vais essayer de faire fonctionner le count du nombre de personnes possédant plusieurs enregistrements dans la table comportant les codes produits W1001, W1017, W1006 et W1019.

    Avec mon imbrication de requetes, j'arrive à compter 45 personne possédant des enregistrements multiple d'une des references citées. Je précise bien qu'il faut compter les personnes qui possèdent plusieurs enregistrements au code cités ( Donc soit deux W1001 mais aussi les autres cas du style un W1001 et un W1017 )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(DISTINCT(NOM)) FROM(
    SELECT CODE_PRODUIT,NOM,COUNT(CODE_PRODUIT) AS NB_PRODUIT 
    FROM `test` 
    WHERE CODE_PRODUIT LIKE 'W1019' OR CODE_PRODUIT LIKE 'W1011' 
    GROUP BY NOM,CODE_PRODUIT
    ) AS RESULT WHERE NB_PRODUIT > 1
    Cette requête fonctionne quand je l'adapte et l'envoie sur phpmyadmin.
    Remarque : Dans phpmyadmin, la colonne s'appelle dans ce cas "COUNT(DISTINCT(NOM))". Il a fallu que je replace un AS RESULT avant le premier FROM ( sans enlever le second, pour éviter une erreur ( ??? )

    La voici qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(DISTINCT(`NOM`)) AS RESULT FROM(
    SELECT `CODE_PRODUIT_CATALOGUE`,`NOM`,COUNT(`CODE_PRODUIT_CATALOGUE`) AS NB_PRODUIT 
    FROM `juin2010` 
    WHERE `CODE_PRODUIT_CATALOGUE` LIKE 'W1001'  OR `CODE_PRODUIT_CATALOGUE` LIKE 'W1017' OR `CODE_PRODUIT_CATALOGUE` LIKE 'W1006' OR `CODE_PRODUIT_CATALOGUE` LIKE 'W1019'
    GROUP BY `NOM`,`CODE_PRODUIT_CATALOGUE`
    ) AS RESULT WHERE NB_PRODUIT > 1
    Mon précédent systeme me renvoyait 45 résultats ( verifiés à la main ) alors que cette requête m'en renvoie 40. Un cas ne dois pas être traité à mon avis . Nous pouvons exclure l'oubli d'un code produit car je les ai vérifié également .
    Quand à la derniere requete, elle me renvoie que deux résultats ce qui ne corresponds pas à ce que contient la table, une fois que j'ai adapté la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(id) as compt,concat(nom,',',prenom) as name FROM `test`where code='W1019' OR code='W1011'  group by name having compt>1
    Merci à vous de prendre un peu de votre temps

  10. #10
    Membre chevronné
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Merci de faire l'effort de lire et de comprendre nos réponses.

    Il faut rajouter à ma requête l'ensemble des critères que tu souhaites y appliquer. Je ne t'ai donné que la structure de ta requête. Personnellement mon objectif est aussi de t'aider à comprendre ce que tu fais et non que tu fasses un copier/coller dans ton code sans comprendre.



    EDIT : Ce que fait ma requête: une fois appliqué TOUS les critères de recherche séparés par OR, la requête retourne une seule fois le nom des personnes avec le compteur des occurences trouvés sur les critères via la colonne compt sur un compteur dont la valeur est supérieur à 1 c'est à dire les noms pour lesquels au moins deux occurences ont été trouvées.

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    C'est de ça que je parle dans l'adaptation
    Bien évidemment, mon but n'es pas de venir ici et de "pomper" des connaissances sans me les approprier. J'ai bien compris la démarche d'entraide de ce forum, ne t'en fait pas , et merci d'essayer de m'enseigner des choses !

    Tiens, voilà la preuve que je fait l'effort de comprendre :
    J'ai réussi à retrouver le nombre de résultat corrects en modifiant le group by :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COUNT(DISTINCT(`NOM`)) AS RESULT FROM(
    SELECT `CODE_PRODUIT_CATALOGUE`,`NOM`,COUNT(`CODE_PRODUIT_CATALOGUE`) AS NB_PRODUIT FROM `test` WHERE 
    `CODE_PRODUIT_CATALOGUE` LIKE 'W1001' OR 
    `CODE_PRODUIT_CATALOGUE` LIKE 'W1017' OR 
    `CODE_PRODUIT_CATALOGUE` LIKE 'W1006' OR 
    `CODE_PRODUIT_CATALOGUE` LIKE 'W1019' 
    GROUP BY `NOM`,`PRENOM`) AS RESULT WHERE NB_PRODUIT > 1
    Je groupe maintenant sur le nom/prenom et non le nom/code_produit
    Merci de votre aide !

    Maintenant, il faut que je réussisse à afficher une chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NOM | PRENOM | NOMBRE DE REFERENCES
    ROBERT CLAUDE 3
    MARC PIERROT 5
    etc ...
    Je vais plancher là-dessus, et je vous tiendrai au courant

  12. #12
    Membre chevronné
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Billets dans le blog
    4
    Par défaut
    Non seulement ma requête groupe aussi sur le Nom/prénom mais en plus elle t'offre l'affichage que tu souhaites.

    Je te laisse relire en plus de mon post précedent ta requête qui n'est pas correcte (alias de champ identique à ton alias de table et alias de table non référencé dans ton champ).

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    La requête précédente me permet d'afficher le total ( utile car je fait un graphique avec les données renvoyée de la requête, donc une seule colonne et un seul résultat = simplicité )

    Dans une autre page, j'affiche le détail, donc c'est ta requête qui m'intéresse dans ce cas
    Je vais donc travailler dessus et je te tiens au courant de l'évolution

    Bien cordialement.

  14. #14
    Membre chevronné
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Billets dans le blog
    4
    Par défaut
    Si tu veux privilégier la performance, un count en PHP sur le nombre d'enregistrement retournés par ma requête, fait la même chose que ta première requête, et t'évite de requêter deux fois ton serveur.

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Merci de l'information

    Et pour ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(NOM) AS compt,NOM,PRENOM FROM `test` WHERE CODE_PRODUIT_CATALOGUE='W1019' OR CODE_PRODUIT_CATALOGUE='W1006' OR CODE_PRODUIT_CATALOGUE='W1001' OR CODE_PRODUIT_CATALOGUE='W1017' GROUP BY NOM,PRENOM HAVING compt>1
    J'ai séparé le nom/prénom pour une séparation des colonnes pour l'affichage.
    Cela fonctionne et prends énormément moins de temps que la méthode précédemment employée pour les lister ! Plus de temps d'attente coté utilisateur, c'est plus qu'acceptable si l'on considère que l'utilisateur n'est pas patient de nature

    Encore merci de votre aide
    Je vous remercie de votre aide !

  16. #16
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    J'essai de comprendre un peu ce problème, et il y a un truc qui me chiffonne dans cette table.

    Cette table 'test' (au 1ère post ce serait une table facture) contiendrait 2 informations : des noms et prénoms de personnes, et des codes de produits (des références quoi).
    Si c'est réellement le cas, et bien c'est peut être ça qui provoquerait le problème que tu rencontre.

    Normalement, il devrait avoir 2 tables :
    -> 1 table qui contiendrait le nom des personnes (1 facture pour 1 personne)
    -> 1 table codes produits des factures (plusieurs code produits pour 1 facture)

    Si toutes les factures contiennent uniquement 1 seul et unique code produit, là on peu créer 1 seule table rassemblant les 2.

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Je vais t'expliquer comme je peux

    En fait, la facturation n'est pas faite pour une personne mais pour une entreprise. Le total est facturé à l'entreprise mais il faut le détail par personne de la boite pour nous permettre de lister les couts et les abus de matériel facturé. C'est pour cette raison, je pense, que les précédents codeurs ont crée une structure de la sorte.

  18. #18
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par ptilemare Voir le message
    En fait, la facturation n'est pas faite pour une personne mais pour une entreprise. Le total est facturé à l'entreprise mais il faut le détail par personne de la boite pour nous permettre de lister les couts et les abus de matériel facturé. C'est pour cette raison, je pense, que les précédents codeurs ont crée une structure de la sorte.
    Peu importe que ce soit une entreprise ou une personne.
    A partir du moment où 1 facture donne lieu à n produits, il faut 2 tables.
    C'est le BABA au niveau conception Bdd.

    Si on ne respecte pas ça, ça débouche sur certaines difficultés à récupérer des données, et c'est l'impression que j'en ai.

    Donc est ce que ceci a été respecté ou pas ?

    [edit]
    En fait, je remarque que cela a été résolu dans le même où j'ai posté.
    Tant mieux.

    Mais à mon avis cette table demanderait à être scinder en deux pour séparer les noms et les produits.
    [/edit]

  19. #19
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Pas du tout !

    Malheureusement, je suis obligé de m'adapter au formalisme déplaisant de cette facturation en une seule table. Bien évidemment, il serait plus aisé d'en avoir plusieurs comme tu le fait remarquer.

    EDIT pour répondre au tiens :
    Oui, c'est sur, ce serait plus simple pour le traitement, mais j'ai des contraintes de temps et de respect du cahier des charges qui m'en empêche car cela remettrait en cause l'importation des facturations
    Tu va me dire que du temps perdu à restructurer c'est du temps gagné sur le développement du PHP associé à la BDD, mais cette "mission" est dans le cadre d'un stage ou je n'ai plus assez de temps :'(

  20. #20
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Non mais, t'as pas à te justifier, raconter tes problème de planning, tout le monde en a.

    Je vois un truc qui me semble pas respecter pas les fondamentaux d'une bonne conception de Bdd, je t'en fais part.
    Après, c'est toi qui vois.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 09h50
  3. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo