Php & Sql

Bonjour,

Actuellement j'ai une base de donnée qui contient une table qui liste les photos ( appelons la table 'Photos') et une autre table qui liste les commentaires des photos ( appelons la table 'commentaire')

Je souhaite en une requête SQL afficher toutes les photos trier par commentaire

exemple :

table photos

A
B
C
D

Tables commentaires

A Commentaire 1(Idcommentaire:1)
A Commentaire 2(Idcommentaire:2)
A Commentaire 3(Idcommentaire:3)
B Commentaire 1(Idcommentaire:4)

J'aimerais qu'il me ressorte :

B ( car c'est la photo ou il y a eu le commentaire le plus récent )
A ( car c'est la photo ou il y a eu le commentaire le plus récent apres celle du B )
C ( car il n'y a pas eu de photo)
D ( car il n'y a pas eu de photo)

Je vous remercie d'avance de votre aide :)

2 réponses

  1. salut !

    Ou est ton critère de date?
    si ta table est du type

    TABLE PHOTO : 
    ID_PHOTP 
    LIB_PHOTO
    
    TABLE COMMENTAIRE
    ID_COMMENTAIRE
    ID_PHOTO
    LIB_COMMENTAIRE
    DATE


    tu peux faire une requete du type

    select PHOTO.LIB_PHOTO , COMMENTAIRE. LIB_COMMENTAIRE
    FROM PHOTO 
    join COMMENTAIRE on COMMENTAIRE.ID_PHOTO = PHOTO.id_PHOTO
    ORDER BY COMMENTAIRE.DATE
    
    
    0
    1. Merci nagashima de ta réponse.

      ___

      select PHOTO.LIB_PHOTO , COMMENTAIRE. LIB_COMMENTAIRE
      FROM PHOTO
      join COMMENTAIRE on COMMENTAIRE.ID_PHOTO = PHOTO.id_PHOTO
      ORDER BY COMMENTAIRE.DATE

      ___

      Je pense qu'avec la requête que tu m'as donné, je n'aurai que les photos qui as eu des commentaires. cela ne me sortira pas la photo C et la photo D.

      C'est pourquoi j'avais pensé à faire la même requête avec LEFT OUTER JOIN.

      En ce qui concerne les dates, je prend en compte la clef primaire de la table Commentaire. Plus l'id est haut plus il est récent.

      ___

      SELECT DISTINCT IdContenu_Albumsharing, Idalbumsharing , Cheminphotosharing , proprietairephotosharing ,Nomphotosharing,GPS FROM Contenu_Albumsharing LEFT OUTER JOIN Commentaires ON Contenu_Albumsharing.IdContenu_Albumsharing = Commentaires.Idphotoalbumsharing where Idalbumsharing='$_GET[Idalbumsharing]' ORDER BY Idcommentaire DESC
      ___

      Exemple reel :

      table Contenu_Albumsharing

      IDphoto idalbum photos
      1252 79 DSC02383
      1309 79 IMG_0803

      table Commentaires

      Idcommentaire Idphotoalbumsharing Commentaire
      272 1252 blabla
      270 1252 blabla
      269 1309 blabla
      268 1309 blabla

      Et actuellement avec la requette ci-dessus, il m'affiche tout de meme ma photo 1309 avant la 1252...
      0
      1. re !
        donc ca sera plutot un left join (tous les résultat de gauche + ceux de droite s'il existe), après j'utilise jamais le outter donc bon ^^

        et pour ordonner par id image :
        ... 
        ORDER BY photo.id_photo, COMMENTAIRE.DATE 
        

        => tu peux ordonner par autant de critères que tu veux (a confirmer mais j'ai jamais eu à faire + que 3), du plus pertinent au moins
        0