mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012
-
29 sept. 2007 à 17:36
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012
-
8 oct. 2007 à 15:23
Bonjour, comme précisé par la rubrique choisie, ma question est à propos du fonctionnement de MySQL disons.
Voila :
en gros et pour faire simple, j'ai deux tables, une news et une texte.
les deux ayant des clés primaires, la table texte à une clé étrangère/secondaire/je ne sais plus comment on l'appelle (désolé je n'ai pas revu de théorie depuis 1 an).
(pas facile à dessiner)(si jamais j'ai inversé les cardinalités, désolé pareil c'est loin)
En fait, la table news (les news d'un site en fait) ne contient pas ses textes, c'est textes qui les contient.
en gros donc, il peut y avoir plusieurs textes sur une seule news (si jamais la news a été modifiée), et donc j'aimerais récupérer uniquement la dernière en date.
Javais pensé à faire un limit 1 mais ca agis sur la requete complète et non sur une seule table. De même, j'ai pensé au group by, mais autant je sais que group by va me renvoyer un seul texte par news (group by textes bien sur), mais lequel ? Je n'ai rien trouvé à ce sujet. Le premier qui apparait dans le classement ? Le dernier ? aléatoire ?
Existe-il une instruction qui pourrait spécialement me servir dans ce genre de cas (en dehors de celles-citées) ?
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012 8 oct. 2007 à 15:23
En fin de compte c'est exactement ce que j'avais fait au départ, mais sans pouvoir vérifier si la ligne renvoyée est bien "la plus haute" ?
Par contre on m'a donné une autre réponse :
SELECT n.numero, t1.texte, t1.date
FROM news n, textes t1
WHERE n.numero=t1.numero_s
AND t1.date= (SELECT MAX(t2.date) FROM textes t2 WHERE t2.numero_s=n.numero)
A vrai dire je n'y avait pas pensé ! Mais ca semble très bien marché (d'ailleurs pourquoi cela ne marcherait-il pas... ?)
Enfin merci à vous pour s'êtrepenché sur mon problème !
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012 29 sept. 2007 à 19:19
En fait, le limit 1 marcherait si j'avais seulement une news a prendre, le but étant de récupérer toutes les news d'un coup ! (donc plusieurs news, mais chacune un seul texte, celui dont la date est la plus récente). C'est pour ca que j'ai pensé au group by, mais je ne trouve pas de doc assez précise dessus. Est-ce que j'ai un risque que l'enregistrement qui sort ne soit pas celui qui se trouve en haut de liste ?
<hr size="2" width="100%" /> Qui ne tente rien...
Ne risque pas d'avoir grand chose !!!
<hr siz="" />
Vous n’avez pas trouvé la réponse que vous recherchez ?
viry0ne
Messages postés12Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention13 avril 2010 8 oct. 2007 à 12:53
Lu'
Moi je verrais bien un ORDER couplé à un GROUP BY...
Tu order by date desc, pour avoir la plus récente en premier, puis tu group by, qui lui te renvoie la ligne 'la plus en haut'.
Apres tu execute plusieurs fois ta requete en t'assurant que tu obtient bien le résultat attendu, et roulez jeunesse.