Aller au contenu

Sujets conseillés

Posté

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 !

Posté

Tu peux nous poster le schema de ta base, s'il te plait ?

Posté (modifié)

base membre

id, pseudo

base topic

id_createur_topic, titre, nb_reponse, id_dernier_posteur

base post

message, 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é par martin
Posté

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.

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

Posté (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_posteur
FROM nc_topic_gestion btg
INNER JOIN nc_membre_site bms ON bms.id = btg.id_premier_posteur
INNER JOIN nc_membre_site bms2 ON bms2.id = btg.id_dernier_posteur
LIMIT 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é par martin
Posté

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_posteur
FROM nc_topic_gestion btg
INNER JOIN nc_membre_site bms ON bms.id = btg.id_premier_posteur
INNER JOIN nc_membre_site bms2 ON bms2.id = btg.id_dernier_posteur
LIMIT 0 , 30

Anonymus.

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...