Help select mysql

Bonjour,

J'ai quelques soucis pour arriver à faire un select correct

j'ai deux tables : une table boutique et une table offre

offre:
id_btik | id_offre | libelle | date_ajout | heure_ajout
1 | 1 |monoffre1 | 21012-10-01 | 16:00:00
2 | 2 |monoffre2 | 21012-10-02 | 16:30:00
2 | 3 |monoffre3 | 21012-10-05 | 17:00:00
3 | 4 |monoffre4 | 21012-10-06 | 18:00:00

btik
id_btik | nom
1 | btik1
2 | btik2
3 | btik3

je voudrais obtenir la liste des toutes les offres triées par date,heure desc et dans le cas ou une boutique aurait plus d'une offre je ne voudrais avoir que la dernière offre de cette boutique soit ici :

id_btik | id_offre | libelle | date_ajout | heure_ajout | nom
3 | 4 |monoffre4 | 21012-10-06 | 18:00:00|btik3
2 | 3 |monoffre3 | 21012-10-05 | 17:00:00|btik2
1 | 1 |monoffre1 | 21012-10-01 | 16:00:00|btik1

Je seche.... quelqu'un pour m'aider ?

Meri par avance

5 réponses

  1. Salut,
    Postes nous d'abord l'ébauche de ta requête, et on pourrait l'améliorer ;)
    1. Bonjour, merci de ta réponse ;-)

      Alors voici où j'en suis :

      SELECT
      btiks.id_btik,
      offres.id_offre,
      offres.libelle,
      offres.date_ajout,
      offres.heure_ajout,
      btiks.nom

      FROM offre offres,btik btiks

      where offre.id_btik=btik.id_btik order by offre.date_ajout desc,
      offre.heure_ajout desc

      J'ai essayé d'ajouter un group by,plusieurs tentatives infructueuses..... pour ne ressortir que id_offre = 3 pour la boutik 2...mais je n'y arrive pas.

      Merci
      1. Si tu veux la dernière offre de la boutique, regarde du côté de MAX :
        SELECT MAX(date_ajout)
        

        Il est censé te prendre la date la plus élevée.
    2. Merci mais j'ai sans doute mal compris tes conseils...

      SELECT
      btiks.id_btik,
      offres.id_offre,
      offres.libelle,
      MAX(offres.date_ajout),
      offres.heure_ajout,
      btiks.nom

      FROM offre offres,btik btiks

      where offres.id_btik=btiks.id_btik order by offres.date_ajout desc,
      offres.heure_ajout desc

      Il ne ne retourne qu'un seul enregistrement...
      id_btik id_offre libelle MAX(offres.date_ajout) heure_ajout nom
      1 1 monoffre1 2012-10-06 16:00:00 btik1
      1. Je pense que j'ai trouvé..

        SELECT
        btiks.id_btik,
        offres.id_offre,
        offres.libelle,
        offres.date_ajout,
        offres.heure_ajout,
        btiks.nom

        FROM offre offres,btik btiks

        where offres.id_btik=btiks.id_btik
        and concat(offres.date_ajout, offres.heure_ajout) in (select concat(max(date_ajout), max(heure_ajout)) from offre group by id_btik)

        order by offres.date_ajout desc,
        offres.heure_ajout desc

        mais il y a surement bcp plus simple
        1. et surtout d'aun fait cela ne fonctionne pas correctement ;-)

          help me please...
          1. Mettre le max dans ton select de départ.
          2. SELECT
            btiks.id_btik,
            offres.id_offre,
            offres.libelle,
            MAX(offres.date_ajout),
            offres.heure_ajout,
            btiks.nom

            FROM offre offres,btik btiks

            where offres.id_btik=btiks.id_btik order by offres.date_ajout desc,
            offres.heure_ajout desc

            Il ne ne retourne qu'un seul enregistrement...
            id_btik id_offre libelle MAX(offres.date_ajout) heure_ajout nom
            1 1 monoffre1 2012-10-06 16:00:00 btik1
          3. et un group by id_btik ?