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

Requêtes MySQL Discussion :

Problème de requête SQL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Par défaut Problème de requête SQL
    Bonjour.

    Je connais les bases en MySQL, avec jointures, etc. Mais là, je sèche. Je n'ai pas d'idée ou je bloque peut-être pour une bêtise.

    Ma requête doit appeler 2 tables.
    Jusqu’à présent, je n'avais que l'une des deux dans mon projet, mais avec les évolutions, il faut que j'en appelle une nouvelle et je bloque.

    Précédemment, j'avais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *, DATE_FORMAT( travaux.date,  '%d/%m/%Y' ) AS date_fr 
    FROM travaux
    LEFT JOIN Fiche_culture ON travaux.fiche_culture_id = Fiche_culture.id_fiche_culture
    LEFT JOIN engrais ON travaux.produit_id = engrais.id_engrais
    LEFT JOIN operateur ON travaux.operateur_id = operateur.id_operateur
    LEFT JOIN justification ON travaux.travaux = justification.id_justification
    WHERE travaux.fiche_culture_id = ".$post['id']."
    ORDER BY `travaux`.`date`, `travaux`.`id_travaux` ASC
    Ma table "travaux" a une colonne "produit_id" que je vais chercher dans engrais.
    Mais aujourd'hui, j'ai une nouvelle catégorie de produits nommée "phyto".
    Comment puis-je faire pour que, suivant l'id, elle aille chercher dans l'une ou l'autre des tables, sachant qu'elles ont un id qui ne sera jamais commun.
    "engrais" va de 1 à 9000.
    "phyto" va de 9000 à l'infini .
    Vu que je n'aurais jamais autant de produits, j'ai de la marge.

    Merci pour vos idées de conception, voir un remaniement côté phyto, vu que côté engrais j'aurais à mon avis beaucoup trop de taf.

    Nom : Sans titre.png
Affichages : 101
Taille : 47,3 Ko

  2. #2
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour et bonne année.

    Quand je lis

    sachant qu'elles ont un id qui ne serq jamais commun
    je me trompe peut-être mais je me dis qu'il y a un problème de conception.

    Vous devriez n'avoir qu'une seule table intégrant et vos produits "engrais", et vos produits "phyto".


    Pierre

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par pier.antoine Voir le message
    je me trompe peut-être
    OUI !
    mais je me dis qu'il y a un problème de conception.
    OUI !

    Vous devriez n'avoir qu'une seule table intégrant et vos produits "engrais", et vos produits "phyto".
    non !!!

    Vous devez bien avoir deux tables dont l'une hérite de l'autre, car un engrais est bien un produit phyto, mais tous les produits phyto ne sont pas des engrais.

    À me lire : http://sqlpro.developpez.com/cours/m...tion/heritage/

    Bref, apprenez à modéliser vos bases au niveau conceptuel au lieu de vous jeter bêtement sur des tables....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Désolé, pour l'héritage, notion que je ne maîtrise pas encore assez, visiblement.

    Merci pour l'info.

    Pierre

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut Astuce
    Bonsoir,

    La notion d'héritage est simple à la base. On identifie les cas d'héritage grâce à une astuce bien pratique : le verbe "être". Ainsi la phrase
    un engrais est un produit phyto
    montre clairement que dès le niveau conceptuel il convient de mettre en oeuvre l'héritage.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Bah justement non, ce n'est pas si simple !
    La preuve, ici, personne n'a apporté de réponse juste !

    Il faut bien mettre en place l'héritage, mais il me semble que cette affirmation est fausse :
    un engrais est un produit phyto
    D'ailleurs, on trouve dans la table phyto beaucoup de colonnes qui ne sont pas dans la table engrais.


    Du coup, il faut ici non pas deux mais trois tables :
    - PRODUIT avec un id_produit en clef primaire et les colonnes communes aux engrais et aux phyto (libelle, "last_update", utilisation) (d'ailleurs, qu'est-ce que cette colonne "utilisation", et pourquoi n'a-t-elle pas le même type dans les deux tables ?)
    - PHYTO, avec id_produit comme clef primaire ET clef étrangère référençant la table produit, ainsi que les colonnes pour les propriétés propres aux produit phyto
    - ENGRAIS avec id_produit comme clef primaire ET clef étrangère référençant la table produit, ainsi que les colonnes pour les propriétés propres aux engrais

    La table TRAVAUX pourra alors référencer la table PRODUIT.


    Pour en revenir à
    On identifie les cas d'héritage grâce à une astuce bien pratique : le verbe "être".
    ça peut en effet mettre la puce à l'oreille, encore faut-il y penser (ici la notion de produit n'était pas réellement présente,bien que le nom de la colonne clef étrangère dans la table travaux l'évoquait).
    Par ailleurs, il faut mettre en place l'héritage seulement si cela a du sens dans le contexte de ce qui est modélisé.

    Par exemple ici, on voit que travaux est updatable
    On voit également que produit est updatable.
    Et on retrouve bien une colonne "last_update" dans les deux tables.
    On pourrait effectivement mettre ici en place un héritage, avec une table METTABLE_A_JOUR (ou un autre nom, si vous préférez ) qui contiendrait cette colonne last_update, et dont hériteraient les tables TRAVAUX et PRODUIT.
    Mais je pense que ce serait ici un excès de zèle qui pourrait s'avérer couteux en développement, sans présenter le moindre intérêt.


    Enfin, je pense qu'il reste d'autres problèmes de modélisation ici : par exemple, je doute que la colonne "principe_actif" ait sa place dans la table TRAVAUX. Je pense qu'elle aurait plutôt dû être initialement dans la table ENGRAIS, et qu’elle devra, en mettant en place l'héritage, être dans la table PRODUIT, puisque la table PHYTO possède la même colonne.

Discussions similaires

  1. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  2. problème de requète SQL pour formulaire
    Par en_stage dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2005, 12h21
  3. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  4. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

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