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

Langage SQL Discussion :

[MySQL 4.1.10] Problème de requête renvoyant les derniers enregistrements


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2004
    Messages : 105
    Points : 80
    Points
    80
    Par défaut [MySQL 4.1.10] Problème de requête renvoyant les derniers enregistrements
    Bonjour à tous,

    Alors...
    A ma gauche... la table "Tarifs" se composant entre autre d'un champ prix et d'un champ date_miseenproduction

    A ma droite... la table "Destinations" dont j'ai besoin du champs pays

    Voici ma requête...
    SELECT Destinations.pays as pays, Tarifs.prix AS prix FROM (Tarifs INNER JOIN Destinations ON Tarifs.i_dest=Destinations.i_dest) WHERE Tarifs.prix>0 GROUP BY Destinations.pays ORDER BY Destinations.pays ASC,Tarifs.date_miseenproduction DESC
    /* Correction suite à une remarque subtile ;-) */

    Cette requête me renvoie donc tous les tarifs des pays... mais pas les derniers saisis !!!
    - Comment faire pour sortir de là, les derniers tarifs saisis par pays ???
    - Est ce que la commande MAX sur une date fonctionne ???

    Merci d'avance !!!

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT D.pays as pays, T.prix AS prix
    FROM Tarifs T
       INNER JOIN Destinations D ON
          T.i_dest=D.i_dest
    WHERE T.prix > 0
    AND T.date_miseenproduction = (
       SELECT MAX(T2.date_miseenproduction)
       FROM Tarifs T2
       WHERE T2.i_dest = T.i_dest
    )
    ORDER BY D.pays ASC
    PS : dans ta requêtes tu avais transformé ta table Tarifs en Rates par moment et tu avais mis deux ON, merci de vérifier ton code avant de le poster

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2004
    Messages : 105
    Points : 80
    Points
    80
    Par défaut
    Merci pour ta réponse...

    C'est la maladie du copier/coller...
    En fait, j'ai bêtement copier/coller mon code, que je voulais "franciser" sur le forum.

    Je corrige...

    Mais sinon, je viens de trouver en faisant 2 requetes... qui reviennent au meme que la tienne ;-)
    Je me permets de prendre ta requete !!!

    Merci !!!

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2004
    Messages : 105
    Points : 80
    Points
    80
    Par défaut
    Heu...

    J'ai un souci avec ta requete simple :

    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MAX(T2.date_miseenproduction) FROM Tarifs T2 WHERE T2.i_dest

    Snifff

    Bon aller, je le refais en 2 requetes...

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    quel est ton SGBD (et sa version surtout)

  6. #6
    Membre régulier
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2004
    Messages : 105
    Points : 80
    Points
    80
    Par défaut
    J'ai un serveur MySQL 4.1.10 ...

    Maintenant que tu me fais la remarque, il me semblait que MySQL ne prenait pas en compte les requetes imbriquées... non ?

  7. #7
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Normalement MySQL supporte les sous-requêtes et requêtes imbriquées à partir de sa version 4.1 justement... bizarre

  8. #8
    Membre régulier
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2004
    Messages : 105
    Points : 80
    Points
    80
    Par défaut
    Oui bizarre !!!


    J'espere que la seule méthode pour résoudre ce souci n'est pas de faire des boucles imbriquées de while et de if !!!!
    (chose qui fonctionne mais laborieux à mettre en place).

    Ahhhh MySQL et les joies de l'imbrication !!! ;-)

  9. #9
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    moi j'enlèverais la clause WHERE qui ne sert pas dans la sous requete
    SELECT MAX(date_miseenproduction) FROM Tarifs

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Le problème est que s'il ne mets pas la clause WHERE, il va avoir uniquement le dernier prix mis en production, alors qu'il veut le dernier pris mis en production pour chaque pays...

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Et si on essayait sans sous-requête corrélée, normalement cela devrait revenir au même mais peut-être que MysQL appréciera plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT D.pays as pays, T.prix AS prix
    FROM Tarifs T
       INNER JOIN Destinations D ON
          T.i_dest=D.i_dest
       INNER JOIN 
       (	SELECT T2.i_dest ,MAX(T2.date_miseenproduction) DATe_MAX_MEP
    	FROM Tarifs T2
    	group by T2.i_dest
       ) AS TP
       on TP.Tarifs=D.i_dest
    WHERE T.prix > 0
    AND T.date_miseenproduction = DATe_MAX_MEP
    ORDER BY D.pays ASC
    A+
    Soazig

Discussions similaires

  1. récuperer l'id du dernier enregistrement mysql
    Par skouza dans le forum JDBC
    Réponses: 1
    Dernier message: 30/08/2010, 15h59
  2. Probl insertion date dans db mysql(odbc)
    Par MetalGearBe dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/03/2007, 16h54
  3. MySQL : trouver le dernier enregistrement
    Par matio dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/10/2006, 12h47
  4. [SGBD] Renvoyer les enregistrements d'une base de données mysql
    Par pod1978 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/01/2006, 21h01
  5. [Kylix] Pb connection à Mysql
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 25/04/2002, 15h26

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