probleme jointures

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme jointures

par Clicky » 23 juin 2009, 23:42

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

par furiouslol » 23 juin 2009, 23:21

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

par graffx » 23 juin 2009, 21:30

hé bien merci clicky, je vais essayer de jeter un oeil la dessus, sinon tu aurais pas un bout de code pour m' inspirer? ^^

par Clicky » 23 juin 2009, 21:25

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.

par graffx » 23 juin 2009, 19:33

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

par Clicky » 23 juin 2009, 13:44

T'as essayé de voir avec ce que je t'ai dit plus haut ?

par graffx » 23 juin 2009, 12:56

:roll: je sais pas si je dois rire ou pleurer la :D

serieusement, personne peut m' aider?

par Nagol » 22 juin 2009, 23:14

si t'as un problème de jointures, faut aller voir un ostéopathe!
...désolé...

par graffx » 22 juin 2009, 23:11

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 ';

par graffx » 21 juin 2009, 23:55

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 :D


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 :D

par enneite » 18 juin 2009, 20:54

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?

par graffx » 18 juin 2009, 18:28

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

par enneite » 18 juin 2009, 17:22

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! :)

par Clicky » 18 juin 2009, 15:03

Salut,

En plus des jointures, essaie peut-être avec un GROUP BY sur l'id de tes forums.

probleme jointures

par graffx » 18 juin 2009, 14:50

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 :(