8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai le sentiment que ce que je cherche à faire est simple mais je n'ai pas trouvé de solution pour le faire... du coup je viens à vous avec grand espoir.

J'ai deux tables. J'aimerais afficher le titre des 3 entrées les plus récente.

Par exemple :
Table 1:
Entrée 1 2005
Entrée 2 2006
Entrée 3 2007

Table 2 : Entrée 1 2008
Entrée 2 2004
Entrée 3 2003

AU finale j'aimerais afficher :
Entrée 2008 (table 2)
Entrée 2007 (table 1)
Entrée 2006 (table 1)

J'ai tenté de faire quelque chose de simple comme :
 SELECT * FROM table1, table2 ORDER BY date

Puis de faire une boucle while pour afficher les trois entrées les plus récentes mais ca ne fonctionne pas.

J'ai fouillé un peu partout, j'ai lu des truc sur la jointure de deux tables ou l'union mais je vois pas comment utiliser ça dans mon cas.

Si vous pouviez me guider sur la bonne voix pour réaliser cette requete....

Merci d'avance,

Dim
Modifié par Dim (07 Feb 2010 - 04:49)
Salut,

ce serait bien plus simple de te répondre en ayant la structure des tables. A ce sujet ont-elles la même ? Si oui : pourquoi 2 tables au lieu d'1 ? Si non : c'est à priori étonnant de sélectionner 2 champs non reliés entre eux par une clef étrangère dans 2 tables différente en 1 seule requête.
Modifié par Heyoan (06 Feb 2010 - 14:29)
Merci de répondre aussi rapidement,

Alors non elles non pas la même structure sinon effectivement je n'aurais fait qu'une table...

Voici la structure de la table infrastructure:
id_photo
id_categorie
titre_photo
date
explication_photo
source

Voici la structure de la table projets:
id_projet
titre_projet
date
contenu_projet

Merci d'avance.
Bonjour,

J'ai pas très bien compris ton premier post mais si j'ai bien compris le second, tu veux afficher les trois lignes les plus récentes de la colonnes "titre_projet" provenant de la table "projets" en sélectionnant les données correspondantes aux projets dans la tables "infrastructures" ?
Modifié par Majimerse (06 Feb 2010 - 14:52)
Dim a écrit :
Alors non elles non pas la même structure
Ben du coup c'est bizarre de faire une seule requête non...

Quoi qu'il en soit tu pourrais faire :
SELECT titre_photo as titre, date_creation FROM infrastructure 
Union SELECT titre_projet as titre, date_creation FROM projets 
Order by date_creation DESC Limit 3
A noter que date est un mot-clé réservé de Mysql et qu'il est déconseillé de l'utiliser comme nom de champ (j'ai donc mis date_creation dans la requête)
Haaaiiiii, je me suis mal exprimé ^^

Merci de tenter de m'aider.
En faite ce que je veux c'est afficher les trois dernières entrées les plus récentes venant de mes deux tables.
Donc le code serait plutôt quelque chose comme ça :
SELECT titre_projet, titre_photos FROM projets, infographie ORDER BY date DESC LIMIT 3;


Mais j'ai déjà essayé et ça n'a pas fonctionné...
Modifié par Dim (06 Feb 2010 - 14:52)
Ok dans ce cas là il faut que tu crées une clé étrangère dans ta table infrastructure ou infographie en utilisant id_projet comme nom de colonne.
Merci Heyoan pour cette réponse rapide qu'il faut que je test,

En quoi c'est bizarre de le faire en une seule requête? J'ai du mal à imaginer comment faire avec deux requêtes pour ensuite comparer mes deux arrays en fonction de la date pour afficher juste ce que je veux.
C'est un peu comme un système de news automatique qui prend les dernières nouveautés en provenance de plusieurs tables.

Pour date, je vais y remédier merci de l'information.
Je test et je reviens pour dire si ça fonctionne ou pas.
Mais si je peux avoir une petite explication de UNION SELECT car j'ai lu quelque truc à ce sujet mais j'ai pas bien compris le fonctionnement.

Merci

EDIT Non j'ai pas essayé ton code Heyoan puisque j'avais pas vu que tu avais répondu quand j'ai posté Smiley cligne
EDIT 2 : Merci Majimerse, mais je crois que Heyoan est plus sur la voix que je cherchais. rajouter un champ dans une de mes tables ne m'enchante pas beaucoup... Surtout qu'il n'y a aucun lien directe entre la table projet et la table infographie si ce n'est qu'elle concerne mon portfolio "pro"... Merci quand même
Modifié par Dim (06 Feb 2010 - 15:03)
Dim a écrit :
C'est un peu comme un système de news automatique qui prend les dernières nouveautés en provenance de plusieurs tables.
Mmm... alors pourquoi pas effectivement.

Du coup il va te manquer des infos pour savoir dans quelle table aller chercher des infos précises pour peu que chaque résultat génère un lien du type plus de détails.

Tu pourrais faire :
SELECT id_photo as id, titre_photo as titre, date_creation, 'infrastructure' as quelletable FROM infrastructure  
Union SELECT id_projet as id, titre_projet as titre, date_creation, 'projets' as quelletable FROM projets  
Order by date_creation DESC Limit 3

Pour les détails sur UNION voir http://sqlpro.developpez.com/
De rien, je ne connaissais pas non plus les requêtes UNION, maintenant si ! Thanks
Modifié par Majimerse (06 Feb 2010 - 15:17)
Je vois que tu ne perd pas la main Heyoan...

Alors ton code fonctionne à merveille. J'ai pas fait la boucle, j'ai juste fait un print_r pour voir ce que me retournais l'array et c'est bien ce qu'il me faut.

Effectivement pour ta proposition supplémentaire je vais en avoir besoin mais je vais étudier ça demain après une bonne nuit... Il est 1h du mat ou je suis actuellement.
Cependant à vue d'oeil je pense que j'aurais quelques petites questions mais il va falloir que ça attende d'être un peu plus réfléchie et bidouillé avant.

Bonne journée

Merci Heyoan et Majimerse

Dim
Bonjour bonjour,

Alors après une bonne nuit, un peu de lecture et quelque bidouillage rapide pour comprendre ce que tu m'as donné et op c'est le top.

Petite question quand même.
Pour l'utilisation de SELECT...UNION SELECT, il est indiqué dans le lien que tu m'as donné il est indiqué que :
"Bien entendu il est indispensable que les deux ordres SELECT :
* produisent un même nombre de colonnes
* que les types de données de chaque paires ordonnées de colonnes soient de même type (ou d'un type équivalent)"

Il se produit quoi si je n'ai pas le même nombre de colonnes? Il n'affichera pas les données?
Qu'est ce qu'ils entendent par "type"? Je comprend pas bien le chinois de la deuxième phrase ^^

Merci beaucoup Heyoan. Toujours là pour aider ça fait plaisir.

See you
'lut,

Dim a écrit :
Il se produit quoi si je n'ai pas le même nombre de colonnes? Il n'affichera pas les données?
La requête plante.

Dim a écrit :
Qu'est ce qu'ils entendent par "type"?
Il faudrait faire les tests complets mais je dirais alphanumérique/alphanumérique, numérique/numérique, date/date, etc.
cf. http://dev.mysql.com/doc/refman/5.0/fr/column-types.html

Dim a écrit :
Merci beaucoup Heyoan. Toujours là pour aider ça fait plaisir.
See you
You're welcome !

Sinon je sais que ce n'est plus nécessaire de te le dire mais au cas où : si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne
Modifié par Heyoan (07 Feb 2010 - 02:02)
a écrit :
Sinon je sais que ce n'est plus nécessaire de te le dire mais au cas où : si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. cligne

Oups un petit oublie ^^

Merci.