Help select mysql

cyril92 -  
Melooo Messages postés 1476 Statut Membre -
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. Melooo Messages postés 1476 Statut Membre 84
     
    Salut,
    Postes nous d'abord l'ébauche de ta requête, et on pourrait l'améliorer ;)
    0
  2. cyril92
     
    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
    0
    1. Melooo Messages postés 1476 Statut Membre 84
       
      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.
      0
  3. cyril92
     
    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
    0
  4. cyril92
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cyril92
     
    et surtout d'aun fait cela ne fonctionne pas correctement ;-)

    help me please...
    0
    1. Melooo Messages postés 1476 Statut Membre 84
       
      Mettre le max dans ton select de départ.
      0
    2. cyril92
       
      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
      0
    3. Melooo Messages postés 1476 Statut Membre 84
       
      et un group by id_btik ?
      0