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 :

Requête MySQL avec table assoc [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Par défaut Requête MySQL avec table assoc
    Bonjour à tous,

    Pour le boulot, je souhaiterai mètre en place une base de donnée afin de gérer des produits.
    En gros j'utilise ces 4 tables :


    Table : salarie
    Champ : idSalarie (INT PRIMARY AUTO INC), nomSalarie (VARCHAR), prenomSalarie (VARCHAR)

    Table : produit
    Champs : idProduit (INT PRIMARY AUTO INC), numSerie (INT), nomProduit (VARCHAR)

    Table : statut
    Champ : idStatut (INT PRIMARY AUTO INC), nomStatut (VARCHAR)

    Table : assoc_produit_statut (INT PRIMARY AUTO INC), idProduit (INT), idStatut (INT), idSalarie (INT), date (TIMESTAMP)

    Je cherche à écrire 2 requêtes SQL différentes qui me retourneraient les champs :

    idProduit, numSerie, nomProduit, nomStaut, CONCAT(nomSalarie,' ',prenomSalarie), date

    Une requête renvoyant des résultats avec le premier statut associé et une deuxième requête renvoyant des résultats avec le dernier statut associé ou null si aucun statut n'a été associé.

    Je n'arrive pas à avoir l'ensemble de mes produits affichées (seulement ceux qui ont au moins un statut associé), de plus, j'ai des doublons de produits lorsque ceux-ci ont plusieurs statut associé.

    Merci d'avance aux âmes charitable qui pourront me filer un coup de pouce.

    Guillaume

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si des produits n'ont pas de status, il faut une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit LEFT JOIN statut
    Pour les produits ayant plusieurs statuts c'est normal que mysql te donne toutes les combinaisons existantes. Que veux-tu à la place ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Par défaut
    Je voudrais juste une ligne par produit avec le dernier statut associé ou null si il n'y en a pas

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Par défaut
    En bidouillant sans jointure ça donnerai ça :


    SELECT idProduit, numSerie, nomProduit, (SELECT nomStatut FROM statut WHERE idStatut=(SELECT idStatut FROM assoc_produit_statut WHERE idProduit=produit.idProduit ORDER BY idAssoc_produit_staut DESC LIMIT 0,1)) AS nomStaut, (SELECT CONCAT(nomSalarie,' ',prenomSalarie) FROM salarie WHERE idSalarie=(SELECT idSalarie FROM assoc_produit_statut WHERE idProduit=produit.idProduit ORDER BY idAssoc_produit_staut DESC LIMIT 0,1)) AS salarie, (SELECT date FROM assoc_produit_statut WHERE idProduit=produit.idProduit ORDER BY idAssoc_produit_staut DESC LIMIT 0,1) AS date FROM produit

    Ça marche quand je teste sur un base test d'une 10ene d'enregistrements mais sur la base réel (150000 produits) le serveurs sature.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT nomProduit, nomStatut 
    FROM produit
    LEFT JOIN 
    (SELECT MAX(`Date`) as maxdate, idProduit FROM assoc_produit_statut GROUP BY idProduit) s ON s.idProduit = produit.idProduit
    LEFT JOIN assoc_produit_statut ON s.maxdate =  assoc_produit_statut.maxdate and s.idProduit =  assoc_produit_statut.idProduit
    LEFT JOIN statut ON assoc_produit_statut.IdStatut = statut.IdStatut
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Par défaut
    J'ai toujours une ligne par statut et par produit

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Par défaut
    Avec un group by ça marche, merci beaucoup !!

    Guillaume

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête mysql avec tables d'associations
    Par louk007 dans le forum Requêtes
    Réponses: 16
    Dernier message: 30/12/2012, 09h04
  2. [PDO] Requêtes MySQL multi-tables ?
    Par nabab dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/08/2007, 19h40
  3. [MySQL] requêtes mysql avec php
    Par youness78 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/07/2007, 16h37
  4. [MySQL] requête mysql avec condition à élaborer à partir d'un tableau
    Par taffMan dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/06/2007, 09h18
  5. Problème de requête MYSQL avec plusieurs limit
    Par Super_baloo8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/05/2007, 18h35

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