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. 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 ?
  2. 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. 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. 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. Salut,
        Postes nous d'abord l'ébauche de ta requête, et on pourrait l'améliorer ;)