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 :

Requête impossible ?


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Requête impossible ?
    Bonjour,

    j'aurais aimé savoir si cette requête était possible :

    J'ai 2 tables : client et achat sachant que dans la table achat il y a une clé étrangère qui relie un achat à un client.

    Je voudrais sortir le 4ème achat pour tous mes clients cependant je ne pense pas que ce soit possible.
    Ai-je tord ou raison ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,


    Donnez plus d'info votre problème n'est pas comptréhensible présenté comme ceci.

    Entre autre :
    - requete actuel
    - jeux de donnée minimal pour comprendre ce que l'on a en entré et en sortie
    - structure des tables

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Exemple table :

    Table Client :
    id int(10) PRIMARY KEY
    nom varchar(25)
    prenom varchar(25)

    Table Achat :
    id int(10) PRIMARY KEY
    article varchar(25)
    quantite int(2)
    external_client_id int(10) FOREIGN KEY (vers id client)

    Exemples table client :
    1 - Albert - Monaco
    2 - Super - Milka
    3 - Hyper - Marché

    Exemples table achat :
    1 - Carotte - 2 - 1
    2 - Poil - 1 - 1
    3 - Super - 4 - 3
    4 - Jambon - 1 - 2
    5 - Jambe - 2 - 2
    6 - DVD - 1 - 3

    Je veux le deuxième achat de tous mes clients donc voilà le résultat :
    Albert - Monaco - Poil - 1 (pour Albert Monaco son deuxième achat c'est 1 poil)
    Super - Milka - Jambe - 2 (Pour Super Milko son deuxième achat c'est 2 jambes (vu qu'une c'est pas pratique))
    Hyper - Marché - DVD - 1 (Pour Hyper Marché son deuxième achat c'est 1 DVD)

    Pour l'exemple de requête c'est difficile parce que je demande si cette requête est possible.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Comment reconnait-on le "4eme achat" ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    C'est le 4ème id achat pour son external_client_id ou alors si tu préféres on rajoute un champ date dans la table achat.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    disons que sans fonction de fenêtrage c'est pas simple du tout.

    Une solution, mais qui ne marchera pas si votre table est volumineuse (perf déplorable) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select *
    from (
    select b.*, (select count(*) from t_achat c where a.id = c.cli_id and c.id <= b.id) as rnk
    from t_client a
    inner join t_achat b on a.id = b.cli_id) t
    where rnk = 2
    A creuser...

    Ceci me semble mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select * from (
    select a.id, a.cli_id
    from t_achat a
    inner join t_achat b on a.cli_id = b.cli_id and a.id >= b.id
    group by a.id, a.cli_id
    having count(*) = 2) t 
    inner join t_achat b on t.id = b.id ;
    => Remplacer le having count(*) par le nième élément voulu.

  7. #7
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Pourquoi pas simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM matable LIMIT 1 OFFSET 4
    ?

    (syntaxe postgreSQL mais adaptable à d'autres)

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    car il veut ce résultat pour chaque client

  9. #9
    Membre confirmé
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Points : 586
    Points
    586
    Par défaut
    Et un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * FROM clients c1
    LEFT JOIN achats b ON c1.id = achats.id_client
    AND achats.id IN 
        (SELECT achat.id FROM achats WHERE achats.id_client = c1.id LIMIT 1 OFFSET 4)
    ? (pas testé)

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Oui, effectivement une requête du genre fonctionenrai.

    Par contre j'ai peur qu'elle soit aussi performante que la 1ere que j'ai posté.

    A tester par l'op

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/12/2007, 19h22
  2. Requêtes impossible à créer
    Par ThieBEN dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/07/2007, 13h27
  3. requêtes impossible sur Postgre
    Par DDMALO dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 25/05/2007, 13h56
  4. [Requête] Impossible de faire fonctionner !
    Par Nesta92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/04/2007, 09h38
  5. Images et requêtes impossible
    Par javaboy dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 16/02/2007, 12h01

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