martin Posté 10 Août 2004 Posté 10 Août 2004 Bonjour! J'ai un ptit probleme... et ma solution ne me convient pas.... J'ai un forum "maison". composé d'une base topic, d'une base post, et d'une base membre. Dans ma base topic, j'ai l'id de l'auteur du topic, et l'id du dernier posteur du topic. Il faudrait que je puisse sélectionner le pseudo correspondant à l'id pour l'auteur du topic ET le pseudo correspondant à l'id pour le dernier posteur du topic. Pour le moment je passe par une base pseudo qui contient le pseudo et l'id de chaque membre. L'inconvénient, j'ai deux bases contenant l'id et le pseudo... je peux aussi faire ceci en deux requetes, mais si cela était possible en une seule ce serait l'idéal... Sinon, je ferais deux requetes !!! Merci d'avance pour vos idées !
Anonymus Posté 10 Août 2004 Posté 10 Août 2004 Tu peux nous poster le schema de ta base, s'il te plait ?
martin Posté 11 Août 2004 Auteur Posté 11 Août 2004 (modifié) base membreid, pseudo base topicid_createur_topic, titre, nb_reponse, id_dernier_posteur base postmessage, date Pour simplifier voilà ce que ca donne... mon idée est de récuperer dans la base membre les pseudos correspondants à "id_createur_topic" et "id_dernier_posteur" Mais peut être qu'une autre organisation générale serait meilleure. Mon but étant de faire un forum sans fioriture, amsi avec les options classiques que tout le monde utilise et avec un minimum de ressources. une première version tourne sur http://www.angers-cinema.com Elle bug un peu question javascript, mais j'attends de faire ma v2 pour corriger cela ;-) Modifié 11 Août 2004 par martin
Anonymus Posté 11 Août 2004 Posté 11 Août 2004 D'un coté, quand le membre s'inscrit, tu completes la table 'membre'. Donc, cela te génère un id. D'un autre coté, quand le membre en question poste un message, il est enregistré. Donc, tu as son id de stocké quelque part (session ou autre). C'est cet id que tu récupères, et que tu mets dans la colonne id_createur_topic ou id_dernier_posteur (ou les 2). Par contre, il est étonnant que tu n'ais pas d'id pour la table topic. Mais je ne comprends pas trop la table 'post'. Elle devrait contenir l'id_dernier_posteur, puisqu'il est lié au message, et non au 'topic'. De plus, elle devrait contenir un id (également), et l'id du topic. En effet, comment sais tu que le message est lié au topic, si tu n'as pas de lien entre eux ? Pour le 'nb_reponse', il suffirait alors de dépiler la table 'post', et de compter les messages qui ont comme 'id_topic' celui en cours. Ce qui est assez rapide, en fait. Voilà pour un premier apercu. Mais il m'a semblé lire que tu n'avais pas mis toutes les tables !? Anonymus.
petit-ourson Posté 11 Août 2004 Posté 11 Août 2004 Bonjour! J'ai un ptit probleme... et ma solution ne me convient pas.... J'ai un forum "maison". composé d'une base topic, d'une base post, et d'une base membre. Dans ma base topic, j'ai l'id de l'auteur du topic, et l'id du dernier posteur du topic. Il faudrait que je puisse sélectionner le pseudo correspondant à l'id pour l'auteur du topic ET le pseudo correspondant à l'id pour le dernier posteur du topic. Pour le moment je passe par une base pseudo qui contient le pseudo et l'id de chaque membre. L'inconvénient, j'ai deux bases contenant l'id et le pseudo... je peux aussi faire ceci en deux requetes, mais si cela était possible en une seule ce serait l'idéal... Sinon, je ferais deux requetes !!! Merci d'avance pour vos idées ! C'est une requete avec jointure que tu souhaite faire ? SELECT C.TITRE AS TITRE, M1.PSEUDO AS CREATEUR, M2.PSEUDO AS POSTEUR FROM CODE C INNER JOIN MEMBRE M1 ON M1.ID = C.ID_CREATEUR INNER JOIN MEMBRE M2 ON M2.ID = C.ID_DERNIER_POSTEUR (Je le fais à l'arrache comme ça sans vérification) Par contre il doit manquer un id pour identifier tes posts, un id pour identifier tes topics et le nombre de réponse est calculable,donc pas vraiment nécessaire dans la base (sauf si on veut éviter de calculer à chaque fois).
martin Posté 12 Août 2004 Auteur Posté 12 Août 2004 (modifié) ben j'ai mis un shémas très simplifié de mes tables, avec juste ce qui nous interresse... J'ai besoin donc d'une jointure, je vais essayer d'adapter ta requete petit ourson... ben voilà un premier essai qui ne marche pas mais qui vous permettra peut être de comprendre le probleme... SELECT id_topic, titre, icone, pseudo AS pseudo_premier_posteur, pseudo AS pseudo_dernier_posteurFROM nc_topic_gestion btgINNER JOIN nc_membre_site bms ON bms.id = btg.id_premier_posteurINNER JOIN nc_membre_site bms2 ON bms2.id = btg.id_dernier_posteurLIMIT 0 , 30 ce qui me donne une erreur : #1052 - Column: 'pseudo' in field list is ambiguous Mon probleme est de joindre deux fois la même table (comment faire?) pour eviter d'avoir une deuxieme table qui fait doublon juste pour avoir les pseudos... Modifié 12 Août 2004 par martin
Anonymus Posté 12 Août 2004 Posté 12 Août 2004 Tu utilises 2 tables, qui comportent chacunes le champ 'pseudo'. Il faut les nommer différemment pour que sql sache à quelle table il doit se référer pour le champ 'pseudo'. Tu vas me dire : Les 2 tables sont les mêmes, c'est la même table. Ok. Mais il faut tout de même lui donner un nom différent à chaque fois, puis appeler 'pseudo' en référence à la première table (ou la seconde, c'est pareil). Concrètement, ca donne : SELECT id_topic, titre, icone, [B]bms.[/B]pseudo AS pseudo_premier_posteur, pseudo AS pseudo_dernier_posteurFROM nc_topic_gestion btgINNER JOIN nc_membre_site bms ON bms.id = btg.id_premier_posteurINNER JOIN nc_membre_site bms2 ON bms2.id = btg.id_dernier_posteurLIMIT 0 , 30 Anonymus.
martin Posté 18 Août 2004 Auteur Posté 18 Août 2004 SELECT id_topic, titre, icone, bm.pseudo AS pseudo_premier_posteur, bm2.pseudo AS pseudo_dernier_posteur FROM nc_topic bt INNER JOIN nc_membre bm ON bm.id = bt.id_premier_posteur INNER JOIN nc_membre bm2 ON bm2.id = bt.id_dernier_posteur La voilà ma solution ;-) Merci beaucoup anonymus
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant