Croisement de table MySQL
Majddar
-
majddar Messages postés 2 Statut Membre -
majddar Messages postés 2 Statut Membre -
Bonjour tout le monde,
Je me retrouve devant un petit problème simple mais ne m'y connaissant pas assez en MySQL, je galère ^^
J'ai 2 tables : une contenant un liste de message avec le login de l'utilisateur correspondant, et l'autre contenant le login des utilisateurs ainsi que leur pseudo correspondant (j'ai fait ce système pour utiliser le login pour la gestion, et le pseudo pour l'affichage public ex : login->toto , pseudo->Toto le plus beau)
pour croiser les tables afin d'avoir comme réponse la liste des messages avec les pseudos correspondant on aurait tendance à utiliser :
SELECT m.message, u.pseudo FROM lesmessage m, lesusers u WHERE m.auteur = u.login
seulement celà ne fonctionne que si pour chaque login correspond un utilisateur. Mais si par exemple un utilisateur a été effacé, ses messages ne sont plus affiché. En fait, ce que j'aimerai avoir, c'est que si un utilisateur correspond au login, MySQL me donne son pseudo et si il n'existe pas (plus) il laisse la valeur de u.pseudo vide...
Cela me parait concevable mais je n'ai toujours pas trouvé la solution.
A v'tre bon coeur ^_^
Je me retrouve devant un petit problème simple mais ne m'y connaissant pas assez en MySQL, je galère ^^
J'ai 2 tables : une contenant un liste de message avec le login de l'utilisateur correspondant, et l'autre contenant le login des utilisateurs ainsi que leur pseudo correspondant (j'ai fait ce système pour utiliser le login pour la gestion, et le pseudo pour l'affichage public ex : login->toto , pseudo->Toto le plus beau)
pour croiser les tables afin d'avoir comme réponse la liste des messages avec les pseudos correspondant on aurait tendance à utiliser :
SELECT m.message, u.pseudo FROM lesmessage m, lesusers u WHERE m.auteur = u.login
seulement celà ne fonctionne que si pour chaque login correspond un utilisateur. Mais si par exemple un utilisateur a été effacé, ses messages ne sont plus affiché. En fait, ce que j'aimerai avoir, c'est que si un utilisateur correspond au login, MySQL me donne son pseudo et si il n'existe pas (plus) il laisse la valeur de u.pseudo vide...
Cela me parait concevable mais je n'ai toujours pas trouvé la solution.
A v'tre bon coeur ^_^
A voir également:
- Croisement de table MySQL
- Table ascii - Guide
- Table des matières word - Guide
- Tableau croisé dynamique ou table de pilote - Guide
- Table des caractères - Guide
- Mysql community download - Télécharger - Bases de données
9 réponses
Salut,
J'ai un peu beaucoup de mal a comprendre ton probleme !!!
Deja au nieavu de la structure de tes tables
voila ce que j'ai compris :
|pseudo|message| |pseudo|auteur|
C'est ca ???
1 auteur a 1 pseudo, OK ??
Mais est ce que 1 pseudo à 1 message ?? si oui, je vois pas l'interet de faire 2 tables, autant faire une table |pseudo|auteur|message|
Je comprends pas tout, explique un peu mieux que ca, et donne ton erreur exact !!!
nico
J'ai un peu beaucoup de mal a comprendre ton probleme !!!
Deja au nieavu de la structure de tes tables
voila ce que j'ai compris :
|pseudo|message| |pseudo|auteur|
C'est ca ???
1 auteur a 1 pseudo, OK ??
Mais est ce que 1 pseudo à 1 message ?? si oui, je vois pas l'interet de faire 2 tables, autant faire une table |pseudo|auteur|message|
Je comprends pas tout, explique un peu mieux que ca, et donne ton erreur exact !!!
nico
Désolé je ne comprends rien a ton histoire !!! un peu dure la matin ;-)
Ton utilise un autre langage type PHP avec MySql ...??
Ton utilise un autre langage type PHP avec MySql ...??
Merci merci,
Alors voilà les tables
|message|login_auteur| et |login|Pseudo|
Le prob se situe dans l'affichage des messages. J'aimerai afficher la liste des messages avec le pseudo de l'auteur correspondant à côté. Autrement dit que le tableau retourné soit :
|message|Pseudo|
Pour que je puisse le traiter pour l'affichage. Tout ça fonctionne si pour chaque login_auteur il y a un login correspondant dans la table des utilisateur (celle avec login et pseudo). Là où ça pose problème c'est si un utilisateur est effacé (effacement total dans la table des utilisateurs). Dans ce cas dans la table des messages, il y aura toujours des messages qui ont été signé pas un login_auteur qui n'existe plus dans la table utilisateur. Ma requête habituelle :
SELECT m.message, u.pseudo FROM lesmessages m, lesusers u WHERE m.login_auteur = u.login
ne retounera plus du tout les messages dont l'auteur aura été effacé dans ce cas il n'y aura plus de login correspondant à login_auteur.
Alors voilà les tables
|message|login_auteur| et |login|Pseudo|
Le prob se situe dans l'affichage des messages. J'aimerai afficher la liste des messages avec le pseudo de l'auteur correspondant à côté. Autrement dit que le tableau retourné soit :
|message|Pseudo|
Pour que je puisse le traiter pour l'affichage. Tout ça fonctionne si pour chaque login_auteur il y a un login correspondant dans la table des utilisateur (celle avec login et pseudo). Là où ça pose problème c'est si un utilisateur est effacé (effacement total dans la table des utilisateurs). Dans ce cas dans la table des messages, il y aura toujours des messages qui ont été signé pas un login_auteur qui n'existe plus dans la table utilisateur. Ma requête habituelle :
SELECT m.message, u.pseudo FROM lesmessages m, lesusers u WHERE m.login_auteur = u.login
ne retounera plus du tout les messages dont l'auteur aura été effacé dans ce cas il n'y aura plus de login correspondant à login_auteur.
Ok, c'est deja beaucoup plus claire ...
Dans le cas, ou ton utilisateur est effacé, qu'est ce que tu veux faire ??
D'apres moi, quand tu effaces ton utilisateur tu devrais aussi effacer les lignes de la table des messages .. de toute facon, un auteur qui n'existe pas ne doit pas pouvoir de loger non ??
Dans le cas, ou ton utilisateur est effacé, qu'est ce que tu veux faire ??
D'apres moi, quand tu effaces ton utilisateur tu devrais aussi effacer les lignes de la table des messages .. de toute facon, un auteur qui n'existe pas ne doit pas pouvoir de loger non ??
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
^_^ si si c'est bien du php/mysql que j'utilise.
Pour avoir un exemple précis, voilà ce que j'ai :
Table des messages
|message|login_auteur|
---------------------------
|message1|toto|
|message2|papi|
|message3|toto|
|message4|titi|
|message5|toto|
Table des users
|login|pseudo|
-----------------
|toto|Le Grand Toto|
|papi|Mon papi|
et ce que j'aimerai avoir par ma requête, c'est le tableau suivant :
|message|pseudo|
----------------------
|message1|Le Grand Toto|
|message2|Mon papi|
|message3|Le Grand Toto|
|message4||
|message5|Le Grand Toto|
Pour avoir un exemple précis, voilà ce que j'ai :
Table des messages
|message|login_auteur|
---------------------------
|message1|toto|
|message2|papi|
|message3|toto|
|message4|titi|
|message5|toto|
Table des users
|login|pseudo|
-----------------
|toto|Le Grand Toto|
|papi|Mon papi|
et ce que j'aimerai avoir par ma requête, c'est le tableau suivant :
|message|pseudo|
----------------------
|message1|Le Grand Toto|
|message2|Mon papi|
|message3|Le Grand Toto|
|message4||
|message5|Le Grand Toto|
Un utilisateur effacé ne peut plus se logger, ok. Mais je trouve dommage d'effacer toute ses contributions au site ou du moins de ne plus les afficher.
On y arrive ;-)))
Bon voila ce que je propose ...
Avant ta requete qui marche, tu rajoute une autre requete du genre
SELECT COUNT pseudo FROM ... WHERE login_auteur=login
Je ne me souvient plus vraiment de la syntaxe ;-), le but etant de compter le nombre de reponse ou plutot de pseudo qui correspond a ton login_auteur !!
Si le resultat de ta requete est != 1, ca veut dire qu'il n'y en pas, et dans ce cas, tu recuperes le message provenant du Login_auteur et tu initialise ta variable pseudo (en php) à "unknown"
si c'est == 1 alors no soucy !!!
Le tout est de vérifier l'avance que tu a un bien un pseudo coorespondant a ton login auteur ... cette facon devrait fonctionner mais il dois en exister d'autres ...
allez bon courage
@+
Nico
Bon voila ce que je propose ...
Avant ta requete qui marche, tu rajoute une autre requete du genre
SELECT COUNT pseudo FROM ... WHERE login_auteur=login
Je ne me souvient plus vraiment de la syntaxe ;-), le but etant de compter le nombre de reponse ou plutot de pseudo qui correspond a ton login_auteur !!
Si le resultat de ta requete est != 1, ca veut dire qu'il n'y en pas, et dans ce cas, tu recuperes le message provenant du Login_auteur et tu initialise ta variable pseudo (en php) à "unknown"
si c'est == 1 alors no soucy !!!
Le tout est de vérifier l'avance que tu a un bien un pseudo coorespondant a ton login auteur ... cette facon devrait fonctionner mais il dois en exister d'autres ...
allez bon courage
@+
Nico
Pour ce qui est de la valeur de l'auteur, si la personne ne l'a pas mis, tu devrais mettre une valeur par défaut! Et avant l'affichage, tu testes si c'est cette valeur et dans ce cas, tu affiche le pseudo... Comme ça, plus de problèmes...
Maily :-))))
Boumj'chtattrape