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 :

doublons avec du left outer join


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut doublons avec du left outer join
    bonjour
    je me prends la tête avec cette requete depuis un certain temps .
    je cherche à afficher des doublons dans la table products
    la 1eme synthaxe marche dont voici le code
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = "SELECT products_id, products_model, count(*) AS nb 
       FROM products 
       WHERE codeF = ".$codeF." 
       GROUP BY products_model 
       HAVING nb > 1";
    j'aimerai trouver des doublons dans la table product sauf ceux de la table 1products_a_garder ou
    specials .j'ai essayé de faire catte requête .mais c'est pas bon .
    merci pour votre aide
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = "SELECT p.products_id, p.products_model, count(*) as nb 
       FROM ".TABLE_PRODUCTS." p "; 
    $req .= " left outer join 1products_a_garder pag on p.products_id = pag.products_id";  $req .= " left outer join specials spe on (spe.products_id = p.products_id)"; 
    $req .= " GROUP BY p.products_model having nb >0";     
    $req .= " WHERE p.codeF = ".$codeF ; 
    $req .= " AND (pag.products_id is null or spe.products_id is null)";

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Je ne sais pas si cela suffira à faire fonctionner ta requête mais le WHERE doit être placé avant le GROUP BY.

  3. #3
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je cherche à afficher des doublons dans la table products
    Que veux tu dire par doublon ?

    Et si tu rajoute le champ products_id dans le GROUP BY ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GROUP BY p.products_id, p.products_model ... etc ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je cherche à afficher des doublons dans la table products
    Que veux tu dire par doublon ?

    Et si tu rajoute le champ products_id dans le GROUP BY ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GROUP BY p.products_id, p.products_model ... etc ...
    des doublons veut dire afficher les produits dont products_model peut être le même.c'est vrai que c'est quand même compliqué

  5. #5
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    Mais ça donne quoi avec le products_id dans le group by ?

    des doublons veut dire afficher les produits dont products_model peut être le même
    Si c'est "peut être," alors un GROUP BY fera que ce ne sera plus peut être, mais il le faudra que ça soit le cas.
    Raison de plus si tu rajoute qu'il y ai au moins 1.

    Si c'est vraiment "peut être" alors la vérification de sa présence devra plutôt se faire du coté de Php, une fois avoir récupérer tous les produits.

    Mais si la condition est qu'il faut que ce model y soit, alors faudrait plutôt éviter de mettre LEFT JOIN, mais JOIN tout court.
    Ou faire un LEFT JOIN sur une table, mais JOIN (tout court) sur une autre.
    De même qu'au lieu de rajouter la recherche d'un products_model dans le GROUP BY, le faire plutôt du coté de la jointure, dans le ON ...


    Faudrait définir un peu plus en détail ce que tu recherche.
    En gros, qu'est ce qui doit être récupéré, et aussi exclu par rapport aux 2 tables 1products_a_garder et specials.


    Mais ce que tu qualifie de doublon, c'est des données normales, ou des données insérées par erreur ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    j'aimerais recuperer tous les produits de la table products ayant des doublons par rapport au champ products_model mais ces produits ne doivent pas se trouver dans la table 1products_a_garder et dans la table special .
    exemple un produit qui se trouve dans la table products et en meme temps dans la table 1products_a_garder ou special ne doit pas être pris en compte.
    pour les doublons :
    si on trouve plusieurs produits dans la table products avec comme products_model exemple "1030" mais ce model ne doit pas se trouver dans la table 1products_a_garder ou special.Alors je veux l'afficher .
    j'espère que c plus clair

  7. #7
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    j'aimerais recuperer tous les produits de la table products ayant des doublons par rapport au champ products_model mais ces produits ne doivent pas se trouver dans la table 1products_a_garder et dans la table special.
    Le terme "doublon" me dérange un peu.
    Faut il qu'il y ait 2 produits ayant le même modèle (1030) dans la table products ?


    En me basant uniquement qu'un model ne se trouve pas dans la table "1products_a_garder".
    Je verrais un truc dans ce genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.products_id, p.products_model
    FROM products p
    WHERE products_id NOT IN (SELECT p2.products_id
        FROM products p2
        JOIN products_a_garder ON p.products_id = pag.products_id
        WHERE products_model = 1030)
    S'il faut qu'il y ait plus de 1 même modèle alors peut être ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT p.products_id, p.products_model
    FROM products p
    WHERE products_id NOT IN (SELECT p2.products_id
        FROM products p2
        JOIN products_a_garder ON p.products_id = pag.products_id
        WHERE products_model = 1030)
    GROUP BY p.products_model
    HAVING COUNT(products_model) > 1

    J'ai exclus la table "specials" car un coup tu dis que : 1products_a_garder et dans la table special.
    un coup 1products_a_garder ou special.
    OU / ET, c'est quand même pas pareil à mon avis.

    Disons qu'il faudrait voir si le code ci-dessus correspond à ce que ça doit retourner.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci c'est une méthode qui marche mais j'ai trouvé une autre solution .Ca c'est mieux et plus performant comme requete
    $req = "SELECT p.products_id,p.products_model,count(*) as nb FROM ".TABLE_PRODUCTS." p ";
    $req .= " left outer join 1products_a_garder pag on p.products_id=pag.products_id";
    $req .= " left outer join specials spe on (spe.products_id=p.products_id)";
    $req .= " WHERE p.codeF=".$codeF ;
    $req .= " GROUP BY p.products_model,pag.products_id,spe.products_id having nb >1";
    $req .= " AND COUNT(pag.products_id) = 0 and COUNT(spe.products_id) = 0";

Discussions similaires

  1. Construction requête : problème avec un LEFT OUTER JOIN
    Par riomois85 dans le forum Développement
    Réponses: 6
    Dernier message: 22/08/2014, 14h25
  2. Requête complexe avec des LEFT OUTER JOIN
    Par bella125 dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/04/2014, 11h51
  3. Sélection d'un MIN(field) avec un LEFT OUTER JOIN
    Par bilbonec dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/09/2012, 11h52
  4. Supprimer doublons obtenus avec left outer join
    Par BoromSikim dans le forum Développement
    Réponses: 3
    Dernier message: 14/06/2010, 14h34
  5. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17

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