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 :

Récupérer le résultat d'une requête UNION


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 18
    Par défaut Récupérer le résultat d'une requête UNION
    Bonsoir,

    Je cherche à récupérer dans une variable, le résultat d'une requête sans succès.
    L'exécution de la requête suivante dans PhpMyAdmin, me renvoi 246 lignes trouvées :
    (select products_id from products_viewed)
    union
    (select products_id from orders_products)

    J'ai essayé cette requête
    select sum(sub_total) as total from
    (
    (select count(*) as sub_total from products_viewed)
    union
    (select count(*) as sub_total from orders_products)
    ) as results, mais il m'affiche total = 476.

    J'ai besoin de vos lumières. Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    essaie avec UNION ALL !

  3. #3
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 18
    Par défaut
    Merci pour la réponse, mais UNION ALL renvoi tous les enregistrements même les doublants. Et ce n'est point le résultat attendu.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    je ne sais pas quel résultat tu attends ; dans ton message, tu demandes juste une explication. Essayer UNION ALL te montrerait que la différence entre 476 et 246, ce sont précisément les doublons.

    L'Union est distincte par défaut ; elle élimine tous les doublons, à la fois ceux qui sont produits par l'union (donc les products_id qui sont à la fois dans products_viewed et dans orders_products n'apparaîtront qu'une fois), mais aussi ceux qui existent dans chacune de tes deux tables (donc un products_id qui serait présent dix fois dans products_viewed n'apparaîtrait qu'une fois).

  5. #5
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 18
    Par défaut
    Merci encore pour votre réponse.
    Le résultat de cette requette affiche 246 lignes dans PhpMyadmin. Comme je l'ai indiqué, je voulais simplement récupérer ce résultat pour une utlisation ultérieur.

    Donc, avec la seconde requête, j'esperais l'avoir, mais la valeur de total vaut 476. Etrange!.

    Enfin j'ai trouvé la bonne requête pour avoir le count(*) dans le cas d'une selection utilisant UNION.
    Pour ceux qui peuvent y trouver un certain intérêt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select sum(sub_total) as total from
    (
    (select count(*) as sub_total, products_id from products_viewed group by products_id)
    union
    (select count(*) as sub_total, products_id from orders_products group by products_id)
    ) as results
    En effet l'ajout de GROUP BY dans chaque SELECT affiche la valeur de total à 246 lignes. Le total de la requête avec UNION est rendu.

    Merci encore.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Ton résultat peut être juste par hasard, mais il n'a absolument aucune signification En effet, supposons que ton premier SELECT count(*) renvoie ce résultat :

    sub_total product_id
    -----------------------
    20 1
    40 2

    total : 60

    supposons maintenant que ton second SELECT count(*) renvoie ce résultat-là :

    sub_total product_id
    -----------------------
    10 1
    40 2
    30 3

    total : 80

    le résultat de l'union est celui-là :

    sub_total product_id
    -----------------------
    10 1
    20 1
    40 2
    30 3

    total : 100

    si ce que tu veux savoir (?) est combien il y a de lignes au total de tes deux tables, la solution est bcp plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT (SELECT COUNT(*) FROM products_viewed)
      + (SELECT COUNT(*) FROM orders_products)
    Si par contre tu veux savoir combien il y a de productsID différentes au total de tes deux tables, la requête est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT COUNT(productsID) 
    FROM (
    SELECT productsID
    FROM products_viewed
    UNION DISTINCT -- ou UNION tout court
    SELECT productsID
    FROM orders_products
    ) AS tempo

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

Discussions similaires

  1. Récupérer le résultat d’une requête http
    Par f_in_afyn dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2007, 17h41
  2. [JTable] Récupérer le résultat d'une requête SQL
    Par malik1982 dans le forum Composants
    Réponses: 10
    Dernier message: 08/07/2006, 19h52
  3. Réponses: 3
    Dernier message: 16/10/2005, 11h53
  4. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07
  5. Réponses: 7
    Dernier message: 30/06/2005, 10h06

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