Page 1 sur 1
probleme jointures
Posté : 18 juin 2009, 14:50
par graffx
salut les gens, j' ai un souci de jointure.
Je m' explique, j' utilise une table pour chaque forum que je suis en traind e faire (forum_general, forum_presentations, forum_3, forum_4)
J' aimerai afficher les dix derniers posts sur mon accueil.
Toutes les tables sont identiques, alors comment faire une jointure pour afficher les dix derniers post de tous les forums unis?
Je n' y arrive pas meme avec des exemples concrets trouvés sur le net :s
J' ai essayé avec UNION, JOIN mais rien

Posté : 18 juin 2009, 15:03
par Clicky
Salut,
En plus des jointures, essaie peut-être avec un GROUP BY sur l'id de tes forums.
Posté : 18 juin 2009, 17:22
par enneite
Je verrais bien une table
forum_accueil
avec les colonnes :
id_forum
nom_forum
date_dernier_message
id_dernier_message
id_forum | nom_forum | date_dernier_message | id_dernier_message
1 | forum_general | 20091706171402 | 54
2 | forum2 | 20090617170243 | 156
... .. ... ...
Tu met dans cette table les noms de tes forums principaux et achaque fois que tu updates un forum avec un nouveau message, tu updates aussi cette table avec l'id du message qui doit se trouver j'imagine dans la table correspondante au forum et la date de creation du message.
Je pense que c'est un truc assez simple.
Ca te fait faire un update en plus lors des enregistrements des messages mais après les possibilités de tri sont très faciles (et avec l'id du message tu peux faire pointer directement sur le message)
Mais au fait comment ça se passe pour la page d'accueil du forum php france, c'est au developpeur de celle ci qu'il faut s'adresser en fin de compte!

Posté : 18 juin 2009, 18:28
par graffx
oui j' ai pensé a ce genre de choses, mais la je je bosse dans un certain ordre, et comm eca devient urgent, je dois faire un truc operationnel et optimiser au fur et a mesure par la suite, personne a une idée pour ces jointures? :s
Posté : 18 juin 2009, 20:54
par enneite
mais si il ny a pas de clés "secondaires" qui lient les tables les unes aux autres, si elles sont indépendantes, une jointure ne servira à rien .
Au pire tu récupères les 10 derniers messages de chaque tables et tu tries le tableau obtenu au niveau applicatif.
C'est quoi la relation entre les tables de chaque forum?
Posté : 21 juin 2009, 23:55
par graffx
salut a toi et desolé pour le retard.
En fait j' ai pris un petit scritp "forum light" qui est genial de par sa simplicité. Il ne reste plus qu' a l' améliorer aprés. Le truc, est que ce script installe un forum à la fois.
Je l' installe donc 5 fois pour avoir 5 forums. Pas trés pratique me direz-vous? Hé bien pour moi si, vu mon niveau, la maintenance si il y a un jour sera plus facile pour moi
Sinon voila la requete pour afficher les 3 derniers message d' un forum:
$sql = 'SELECT id,pseudo,email,date_verif,titre FROM forum_general WHERE reponse_a_id="0"';
$sql.= ' ORDER BY derniereReponse ASC, date_verif ASC LIMIT 0, 3 ';
Le hic est que sur ma page d' accueil je ne peux afficher 5 fois cette requete pour des raisons que vous imaginez bien.
J' aimerai donc faire une jointure sur ces 5 tables strictement identique au niveau structure afin de ne pas faire 5 catégories sur ma page d' accueil pour afficher les 3 derniers messages de chaque forum, mais plutot les 10 ou 20 derniers messages dans la totalité des 5 forums en une seule fois.
J' ai esayé un paquet de fois les jointures, mais j' ai du ne pas comprendre quelque chose, ca n' a jamais marché.
Si un gentil maitre en php pouvait me filer un coup de patte la dessus

je lui ferai plein de bises
edit: je sens que je vais galerer la dessus, je crois que peu savent se servir des jointures en fait, non? Je comprend parce que j' ai pas du bien comprendre moi meme leur fonctionnement

Posté : 22 juin 2009, 23:11
par graffx
voila ce que j' ai fait, si quelqu' un pouvait me dire ce qui ne vas pas, ca serait aimable
$sql = 'SELECT id,pseudo,email,date_verif,titre FROM forum_general AS a
INNER JOIN forum_presentations AS c ON a = c WHERE reponse_a_id="0"';
$sql.= ' ORDER BY derniereReponse ASC, date_verif ASC LIMIT 0, 3 ';
Posté : 22 juin 2009, 23:14
par Nagol
si t'as un problème de jointures, faut aller voir un ostéopathe!
...désolé...
Posté : 23 juin 2009, 12:56
par graffx

je sais pas si je dois rire ou pleurer la
serieusement, personne peut m' aider?
Posté : 23 juin 2009, 13:44
par Clicky
T'as essayé de voir avec ce que je t'ai dit plus haut ?
Posté : 23 juin 2009, 19:33
par graffx
ben en fait, deux choses.
1 - mes forums n' ont pas d' id, pour la simple et bonne raison que j' ai créé un forum par table, tout ce qu' il y a de plus simple, un peu comme le script totu fait "light forum". C' est a dire que dans ma bdd, j' ai par exemple forum_coucou, forum_blabla....
2 - et le GROUP BY je n' ai rien vu la dessus concernant les jointures, mais bon, mes forum sn' ayant pas d id...
Posté : 23 juin 2009, 21:25
par Clicky
GROUP BY s'utilise avec ou sans les jointures, il n'y a pas de problème, et tu peux t'en servir sur n'importe qu'elle colonne (pas forcément avec les id), et sur plusieurs colonnes si nécessaire.
Il existe de bons tutos sur le sdz, un qui parle de GROUP BY et un autre des jointures. Il y en a même un autre pour faire un forum complet, tu peux peut-être t'en inspirer, bien qu'il ne soit pas conçu comme celui que tu veux faire.
Posté : 23 juin 2009, 21:30
par graffx
hé bien merci clicky, je vais essayer de jeter un oeil la dessus, sinon tu aurais pas un bout de code pour m' inspirer? ^^
Posté : 23 juin 2009, 23:21
par furiouslol
J'ai pas de bout de code mais :
mais si il ny a pas de clés "secondaires" qui lient les tables les unes aux autres, si elles sont indépendantes, une jointure ne servira à rien .
Au pire tu récupères les 10 derniers messages de chaque tables et tu tries le tableau obtenu au niveau applicatif.
Je dirais c'est pas faux, pas de liaison pas de jointure
Ce que tu peux faire c'est créer une vue sur tes 5 tables de forum, tu remplis un ID_forum suivant les données que tu met dans ta vue, ainsi tu pourra faire des requêtes sur l'ensemble de tes messages sans ajouter de données dans ta base
CREATE VIEW v_forum AS
(SELECT 1 as id_forum, id_message FROM forum1)
UNION
(SELECT 2 as id_forum, id_message FROM forum2)
UNION
(SELECT 3 as id_forum, id_message FROM forum3)
UNION
(SELECT 4 as id_forum, id_message FROM forum4)
UNION
(SELECT 5 as id_forum, id_message FROM forum5)
;
Ainsi tu peux traiter ta vue comme une table, en tout cas en select :
Select * from v_forum where ....;
http://www.apprendre-php.com/tutoriels/ ... -vues.html
Posté : 23 juin 2009, 23:42
par Clicky
hé bien merci clicky, je vais essayer de jeter un oeil la dessus, sinon tu aurais pas un bout de code pour m' inspirer? ^^
Le mieux c'est que t'ailles directement sur le sdz, chercher les tutos dont je t'ai parlé et les consulter.
Leurs explications et exemples seront sûrement mieux que les miens

.