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 :

limiter les résultats à une seule réponse par email


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 59
    Points : 43
    Points
    43
    Par défaut limiter les résultats à une seule réponse par email
    Sincèrement désolé pour le titre...
    Bonjour à tous.

    J'ai une requete sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.id_cart, c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email
    		FROM ps_'cart c
    		LEFT JOIN ps_orders o ON (o.id_cart = c.id_cart)
    		LEFT JOIN ps_customer cu ON (cu.id_customer = c.id_customer)
    			WHERE cu.id_customer IS NOT NULL AND o.id_order IS NULL
    Le souci est que j'ai beaucoup de résultat ayant le même email.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    155 	5 	4 	prénom 	nom_exemple1 	test@exemple1.fr
    278 	5 	4 	prénom 	nom_exemple1 	test@exemple1.fr
    279 	5 	4 	prénom 	nom_exemple1 	test@exemple1.fr
    366 	5 	4 	prénom 	nom_exemple1 	test@exemple1.fr
    461 	5 	4 	prénom 	nom_exemple1 	test@exemple1.fr
    28 	5 	5 	prenom_exemple2 	nom_exemple2 	test@exemple2.fr
    34 	5 	5 	prenom_exemple2 	nom_exemple2 	test@exemple2.fr
    35 	5 	5 	prenom_exemple2 	nom_exemple2 	test@exemple2.fr
    60 	5 	5 	prenom_exemple2 	nom_exemple2 	test@exemple2.fr
    27 	5 	7 	prenom_exemple3 	nom_exemple3 	test@exemple3.fr
    51 	5 	8 	prenom_exemple4 	nom_exemple4 	test@exemple4.fr


    Hors ce que je souhaiterait serait d'avoir la même requête mais en limitant à un résultat part cu.email ayant le c.id_cart le plus elevé.

    Sachant que le résultat désiré serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    155 	5 	4 	prénom 	nom_exemple1 	test@exempl
    461 	5 	4 	prénom 	nom_exemple1 	test@exemple1.fr
    60 	5 	5 	prenom_exemple2 	nom_exemple2 	test@exemple2.fr
    27 	5 	7 	prenom_exemple3 	nom_exemple3 	test@exemple3.fr
    51 	5 	8 	prenom_exemple4 	nom_exemple4 	test@exemple4.fr

    Mais je but avec DISTINCT???

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 59
    Points : 43
    Points
    43
    Par défaut Requete avec GROUPY BY
    Au lieu de DISTINCT j'essaye GROUP By
    J'ai trouver cela: Vous en penser quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT * FROM 
     
    (
    SELECT c.id_cart, c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email
    		FROM ps_cart c
    		LEFT JOIN ps_orders o ON (o.id_cart = c.id_cart)
    		LEFT JOIN ps_customer cu ON (cu.id_customer = c.id_customer)
    			WHERE cu.id_customer IS NOT NULL AND o.id_order IS NULL
    			ORDER BY c.id_cart DESC
    ) as my_table_tmp
    			GROUP BY id_customer
    ORDER BY id_cart DESC

  3. #3
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email 
    FROM ps_'cart c
     LEFT JOIN ps_orders o ON (o.id_cart = c.id_cart) 
     LEFT JOIN ps_customer cu ON (cu.id_customer = c.id_customer) 
    WHERE cu.id_customer IS NOT NULL AND o.id_order IS NULL
    Participez vous aussi !
    Message utile
    Discussion résolue

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonjour,

    Que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MAX(c.id_cart), c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email
    FROM ps_cart c
    LEFT JOIN ps_orders o ON (o.id_cart = c.id_cart)
    LEFT JOIN ps_customer cu ON (cu.id_customer = c.id_customer)
    WHERE cu.id_customer IS NOT NULL AND o.id_order IS NULL
    GROUP BY c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email
    une réponse vous a permis d'avancer ?

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 59
    Points : 43
    Points
    43
    Par défaut Resultat
    Merci pour votre aide.

    La rquete d'exia93 et la mienne donne les m6eme résultat (ceux recerché)
    Exia93 0.0074s
    lamienne 0.0059s
    en revanche ma requete semblerais plus rapide???

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Je pense que cela vient du fait que tu ne fait un regroupement que sur la conne id_customer dans ta requête alors que moi je le fait sur les colonnes c.id_lang, cu.id_customer, cu.firstname, cu.lastname, cu.email.

    Syntaxiquement parlant ta requête est fausse car toutes les colonnes ne faisant pas partie du GROUP BY doivent être soumis à une fonction de regroupement (count, sum, max, min, ...). Seulement MySQL ne fait pas cette vérification et accepte cette syntaxe, il faut y faire attention car ce genre de requête peut retourner des résultats aléatoires et être refuser sur d'autre SGBDR (Oracle, Postgres, MSSQL, ...), par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    col1   |   col 2
    1      | 1
    1      | 2
    1      |3
    Avec la table ci-dessus si tu fait comme requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM maTable
    GROUP BY col1
    Le résultat sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    col1 |  col2
    1    |  1
    -- Ou bien
    col1 |  col2
    1    |  2
    -- Ou bien
    col1 |  col2
    1    |  3
    Sans que tu puisse être certain du résultat de ta requête.
    une réponse vous a permis d'avancer ?

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 59
    Points : 43
    Points
    43
    Par défaut Encore Merci
    Merci Beaucoup à toi!

Discussions similaires

  1. lu tous les jours mais exécuté une seule fois par mois
    Par sianto dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 17/11/2008, 09h08
  2. Limiter les résultats d'une zone de liste déroulante (requête)
    Par Tipstitou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/02/2008, 11h01
  3. Traitement des résultats si une seule réponse
    Par Metallic-84s dans le forum Débuter
    Réponses: 2
    Dernier message: 20/03/2006, 11h57
  4. [VB.NET]une seule instance par fenetre MDI
    Par pat59 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/02/2006, 11h14
  5. Limiter les résultats d'une requête à \today\' - n jours
    Par Eddy Duflos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2005, 08h46

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