Group By ?

Les solutions techniques de création de site Web ; mise en place de bases de données ; les solutions d'hébergement ; ...

Group By ?

Messagepar 3L3KMAD » 03 Oct 2007, 16:41

Bonjour à tous.

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).

Code: Tout sélectionner
                       | textes |
| news |              |numero|
|numero|(1,n)<===(1,1) |numero_s|
|...|                   |date|
                        |...|
(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.
J'avais pensé à faire un limit 1 mais ça agis sur la requête 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) ?

En attendant de trouver, j'ai rajouté un champs date dans news aussi mais ça ne fait pas propre a mon gout ! Sachant que si je devait le faire manuellement je n'en aurais pas besoins, je me dit que ce dois être faisable sans en sql !
Qui ne tente rien ne risque pas d'avoir grand chose !
Avatar de l’utilisateur
3L3KMAD
Hello World, I'm new !
 
Messages: 426
Inscription: 04 Oct 2005, 10:50
Localisation: Lille

Messagepar Gulix » 03 Oct 2007, 17:13

je peux te proposer ça :

si date est bel et bien unique pour un numero de news donné :
Code: Tout sélectionner
SELECT n.numero, t1.texte, t1.date
FROM news n, textes t1
WHERE n.numero=t1.numero
  AND t1.date= (SELECT MAX(t2.date) FROM textes t2 WHERE t2.numero=t1.numero)


Ca devrait fonctionner.
Par contre, c'est quoi numero_s ?
Récits fantastiques amateurs sur http://www.les-chroniques.org
Blind Shark - Mon programme de Blind Test
Walléatoire - Wallpaper Manager
Mon Site-Blog
Avatar de l’utilisateur
Gulix
Hello World, I'm new !
 
Messages: 118
Inscription: 26 Juil 2005, 11:29
Localisation: Brest (Bretagne)

Messagepar 3L3KMAD » 03 Oct 2007, 17:52

numero_s est la clé étrangère (encore une fois suis pas sur du nom), qui contient donc le numero de la news a laquelle le texte est relié !

Je te remercie pour la solution donnée, je vais voir (là j'ai pas le PC à dispo cause sauvegarde en vue de formattage)
Qui ne tente rien ne risque pas d'avoir grand chose !
Avatar de l’utilisateur
3L3KMAD
Hello World, I'm new !
 
Messages: 426
Inscription: 04 Oct 2005, 10:50
Localisation: Lille

Messagepar 3L3KMAD » 03 Oct 2007, 18:07

Bon, j'ai testé directement en ligne, ça marche aussi lol

Donc, après quelques modification mineures (concernant justement numero_s, et le nom des tables que j'avais tronqué pour faire plus simple), ça donne quelque chose dans le genre :

Code: Tout sélectionner
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)


Comme tu le vois, je n'ai quasiment rien modifié (par contre, il semble que ca marche, mais disons que je n'ai pas encore assez de contenu pour pouvoir être totalement certain) En tout cas merci beaucoup, tu me fait en plus avancer dans la maitrise du langage ! Par contre, concernant le goup by ? Tu saurais-dire ? Ca m'intéresse quand même de savoir la réponse !
Qui ne tente rien ne risque pas d'avoir grand chose !
Avatar de l’utilisateur
3L3KMAD
Hello World, I'm new !
 
Messages: 426
Inscription: 04 Oct 2005, 10:50
Localisation: Lille

Messagepar Gulix » 03 Oct 2007, 18:16

En utilisant le group by, je ne sais pas si ça aurait bien fonctionné. En faisant un truc du genre :

Code: Tout sélectionner
SELECT numero_s, texte, date
FROM textes
GROUP BY numero_s
ORDER BY date DESC


tu aurais obtenu quelque chose comme ça :
1 - bla - 20070929
1 - bli - 20070928
2 - bla - 20070929
2 - bli - 20070928
2 - bla - 20070926
3 - bli - 20070928

mais tu aurais du, à la main, faire les sauts entre les numéro_s.
En jouant avec les HAVING, peut-être peux-tu sortir quelque chose ? Mais ça fait longtemps que j'ai pas touché à ça. Je préfère de bonnes vieilles jointures :D
Récits fantastiques amateurs sur http://www.les-chroniques.org
Blind Shark - Mon programme de Blind Test
Walléatoire - Wallpaper Manager
Mon Site-Blog
Avatar de l’utilisateur
Gulix
Hello World, I'm new !
 
Messages: 118
Inscription: 26 Juil 2005, 11:29
Localisation: Brest (Bretagne)

Messagepar 3L3KMAD » 03 Oct 2007, 18:32

Je ne comprend pas ce que tu veux dire par "faire les sauts entre les numero_s" ?

voila la requête telle que actuellement (et qui marche, mais j'ai donc un champs date supplémentaire dans news, ce que je veux éviter) :

Code: Tout sélectionner
SELECT n.numero,
n.date,
t.texte,
u.pseudo
FROM textes t
INNER JOIN news n ON t.numero_s = n.numero
    AND n.date = t.date
INNER JOIN users u ON t.compte = u.numero
WHERE t.type = '1'
    AND n.afficher = '1'
    AND n.date<='$date'
    AND MONTH(n.date) = '$mois'
    AND YEAR(n.date) = '$annee'
ORDER BY n.date DESC
LIMIT $offset, 10


Bon bien sur il y a un peu de php au milieu... Le HAVING, je n'ai jamais vraiment utilisé pour le moment ! Je me débrouille sans en général. Mais en faisant avec un GROUP BY, j'obtenais ce que je voulais (a savoir un seul texte par news, et dans mes essais, le dernier texte en date), mais ne sachant pas si c'était du à la "chance" ou non ???? (C'est con de laisser quelque chose comme ça au hasard quand même)

Et pour ce qui est du numero_s, je ne vois pas vraiment (si c'est ce que tu veux dire) pourquoi il est de trop ? Suivant le MCD et le MLD (et suivant les règles de MERISE, mais là je m'avance peut être), ce n'est pas anormal il me semble !
Qui ne tente rien ne risque pas d'avoir grand chose !
Avatar de l’utilisateur
3L3KMAD
Hello World, I'm new !
 
Messages: 426
Inscription: 04 Oct 2005, 10:50
Localisation: Lille

How do I converting mp4 to wma either

Messagepar stictNins » 12 Oct 2017, 08:09

Free mp4 to wma download his comment is here: freeware mp4 to wma converter cut affair best mp4 to wma converter look However, when lauing the program for the first time, you will notice its easy-to-use and intuitive interface that can easily be managed by any user. All you need to do in order to use this program is to select the MP4 files you wish to convert, choose a destination folder and adjust the settings (select the output profile that best fits your needs) for the output file and press the "Convert" button. In just a few moments, you will have your audio file ready to be listened. FLV To MP3 Converter is a simple Windows application that doesn't pose any problems during the installation process, as everything is very intuitive. The same can be said about the graphical interface of the program. One can add more FLV files into the program and even complete FLV folders. After completing this step, the user just needs to select the desired audio format for saving the FLV video and also configuring quality settings. Each type of audio format has its own quality settings.
Online Free mp4 to wma converter: mp4 to wma converter free online visit this site right here http://www.magicaudiotools.com/convert-mp4-to-wma
stictNins
Hello World, I'm new !
 
Messages: 148
Inscription: 14 Sep 2017, 01:40


Retourner vers Techniques pour les sites web

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron