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 :

3 requêtes en 1 requête [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut 3 requêtes en 1 requête
    Bonjour,

    Je cherche les transactions terminées par un utilisateur. Je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) as count
    FROM transactions
    WHERE id_user = ".$row['id_user']." && termine = 1
    Mais je veux aussi les transactions terminées ET validées, je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) as count
    FROM transactions
    WHERE id_user = ".$row['id_user']." && valide = 1
    Comment en faire une seule requête, est-ce possible?
    Merci

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut

    tu fusionnes tes clauses where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) as nb
    FROM transactions
    WHERE id_user = ".$row['id_user']." AND termine = 1 AND valide = 1

  3. #3
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Tu fusionnes comme le post ci dessus avec un OR telle que:

    transactions terminées et non validées OU transactions terminées et validées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(id_user) as nb
    FROM transactions
    WHERE id_user = ".$row['id_user']." AND ( (termine = 1 AND valide = 0) OR
                                                            (termine = 1 AND valide = 1) )

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,

    En voulant faire mon intéressant et simplifier encore la requête sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (termine = 1 AND valide = 0) OR (termine = 1 AND valide = 1)
    équivaut strictement à (et oui, "valide" étant a priori un booléen, il ne peut être égale qu'à 0 ou 1...), je me rends compte que la question n'est peut-être pas très claire.
    Souhaites-tu avoir deux nombres, celui des transactions terminées ET celui des transactions terminées et validées, ou souhaites-tu un seul nombre qui serait quelque chose d'autre ?

    Dans le cas où tu souhaites les deux nombres, je te conseille de faire deux requêtes. C'est meilleur au niveau temps de calculs des requêtes SQL...
    Dans l'autre cas, peux-tu préciser quelle valeur tu cherches à calculer ?

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 815
    Billets dans le blog
    14
    Par défaut
    Si termine et valide sont deux booléens, au lieu de compter les lignes pour lesquelles ces booléens sont à 1, il suffit de les additionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM(termine) AS count_termine,
    	SUM(valide) AS count_valide
    FROM transactions
    WHERE id_user = ".$row['id_user']
    Et bien sûr, si tu veux ça pour chaque id_user, fais un GROUP BY !
    Ton $row['id_user'] laisse à penser que tu boucles sur le résultat d'une autre requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    En voulant faire mon intéressant et simplifier encore la requête sql
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    (termine = 1 AND valide = 0) OR (termine = 1 AND valide = 1)
    équivaut strictement à
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    termine = 1
    hi hi hi j'en suis bien d'accord, honte à moi

    Mais je crois que notre hôte nous a lâché dans notre intéractivité

    PS: allez nous allons dire que ma requête est une bonne traduction même si nous pouvons la simplifier.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/12/2005, 14h36
  2. Requête sur une requête dynamique...
    Par kluh dans le forum Access
    Réponses: 4
    Dernier message: 17/11/2005, 19h59
  3. Réponses: 5
    Dernier message: 07/11/2005, 15h38
  4. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14
  5. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 22h52

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