jointure requete simple sous phpmyadmin - SQL/NoSQL - Programmation
Marsh Posté le 19-12-2004 à 20:21:42
Aucune manipulation n'est necessaire, mais essaie des simple coat.
Et sinon a la place de "=" met un "LIKE".
Si ça marche tjr pas ya un truc pour relié les table, mais normalement ça marche quand meme.
Tu va dans ta table message, et t'a une icone, en dessous de la description des attribut de la table, gerer schema relationella tu pourra dire a ton attribut login qu'il depend de login dans ton autre table.
Voila
Marsh Posté le 19-12-2004 à 21:29:22
je ne vois pas où est le problème, j'ai fait un site internet ou des membre vendaient des produits, donc forcément à l'affichage de la liste des produits pour avoir le nom du vendeur on doit faire une jointure.
sinon ce que je te propose c'est soit de mettre un as entre client et c, message et m. sinon change le nom de l'attribut login en login1 dans la table message et change ta requête en :
select password
from client, message
where login = login1
and mess = 'salut'
Marsh Posté le 20-12-2004 à 02:17:05
le probleme n'est pas la requete mais phpmyadmin, il voit 2 tables mais par défault elles ne sont pas en relations. Je suis sous easyphp. En fait il ne voit pas la clé étrangere qui comme je l'ai dit n'est pas mit par défault.
Je voullai savoir comment je pouvais faire, sinon , qu'est ce que je pourrai prendre pour faire cela.
Autrement, c'est le meme cas avec mon fournisseur d'acces "Free", y aurai til aussi un moyen chez eux de nommé ma clé étrangere ?
Marsh Posté le 20-12-2004 à 09:27:29
il n'y a pas de foreign key dans mysql hé oui c'est comme ça, à moins d'installer cygwin ou linux et bosser sous postgresql je ne vois pas d'autre moyen
Marsh Posté le 20-12-2004 à 13:16:39
Snif , c'est bien triste tout ca, bon ba on va se demerdé sans alors.
Merci a vous
Marsh Posté le 20-12-2004 à 22:36:08
regarde plutôt les dernières versions de mysql ce problème a peut être été corrigé.
Marsh Posté le 21-12-2004 à 09:26:48
quand tu dis que tes requêtes marchent pas, tu peux être plus précis? T'as quoi comme messages d'erreur?
Marsh Posté le 21-12-2004 à 15:30:58
mes requetes sont tres bien, seulement le sgbd ne connait pas foreign key (clé étrangere afin de relier la table avec la clé primaire)
Marsh Posté le 21-12-2004 à 16:50:53
ben t'as qu'à faire une equi-jointure... pas besoin de foreign key.
Marsh Posté le 04-01-2005 à 15:20:23
On ne peux pas faire de jointure sous mysql. on ne peux pas faire de requetes imbriquées non plus. Mais que peut on faire appart des requetes simples.
Je voudrai que plusieurs de mes tables soit en relation afin de pouvoir faire tournée ce que je veux faire. que cela fonctionne comme sous Access.
Si il n'y a vraiment aucun moyen, faites le moi savoir. merci
Marsh Posté le 04-01-2005 à 16:20:02
je te le redis : une equi-jointure.
ex : une table employes et une table Emplois avec la relation un employé à un et un seul emploi.
Table Employes : EmployeID, Nom, Prenom, EmploiID
Table Emplois : EmploiID, NomEmploi
ici, EmploiID est donc une clé étrangère dans la table Employes.
Pour afficher la liste des employés avec le boulot qu'ils font :
SELECT e.Nom, e.Prenom, emp.NomEmploi FROM Employes e, Emplois emp WHERE e.EmploiID = emp.EmploiID
Voilà, j'espère que ça répond à ta question, sinon, c'est que je n'ai pas compris ce que tu voulais faire...
Marsh Posté le 04-01-2005 à 21:21:30
Alors la chapo, merci. ca marche parfaitement
Je ne comprend vraiment pas pourquoi moi ca ne marchais pas.
Regarde ma requete ici:
select password
from client c, message m
where c.login = m.login
and mess = "salut";
elle était pourtant correct mais rien ne s'affichais. pourtant dans ce que tu ma donné, je ne vois pas vraiment de difference.
Pourrai tu m'éclairé sur mon erreur stp. merci
quelle est la difference entre une jointure classique et une équijointure.
Marsh Posté le 05-01-2005 à 10:13:26
perso, pour ta table client, j'aurais mis comme clé primaire un ID (int) et non le login. En +, ça prend moins de place. Sinon pour ta requête, essaye en mettant les alias sur tous les champs, mais j'y crois pas trop :
select c.password
from client c, message m
where c.login = m.login
and m.mess = "salut";
pour la différence entre jointuyre classique et equi-jointure, je pense que la première concerne les Join, left join, etc. alors que l'autre, c'est avec un =
Marsh Posté le 05-01-2005 à 10:52:38
badze a écrit : |
Le resultat va differer...sur le nombre d enregistrements en sortie, mais je crois que cela depend souvent du champ sur lequel se fait la jointure, et surtout si il peut etre "vide"
Une jointure naturelle(ou equi-jointure => '=') donne tous les resultats , alors qu une jointure standard ne donnera que ce qui correspond parfaitement je crois bien....a verifier, mais generalement faut eviter de faire des equijointures on utilise plutot des LEFT JOIN, RIGHT JOIN, INNER, OUTER etc...
rufo a raison, tu devrais mettre un id pour ta table client et perso je ferais plutot une requete du style:
SELECT password FROM Client C LEFT JOIN Message M ON M.Login=C.Login WHERE M.Mess LIKE '%%'
Marsh Posté le 05-01-2005 à 13:28:32
le mieux, c'est d'aller sur l'aide en ligne de mysql pour voir ce que font left join, etc.
Marsh Posté le 18-12-2004 à 19:53:19
Voila, je ne comprend pas pourquoi les requetes que je fait ne marche pas, voici les tables que j'ai crée.
CREATE TABLE `client` (
`login` varchar(30) NOT NULL default '',
`password` varchar(30) NOT NULL default '',
PRIMARY KEY (`login`)
) TYPE=MyISAM;
INSERT INTO `client` VALUES ('badze', '210884');
INSERT INTO `client` VALUES ('fabien', '2108');
# --------------------------------------------------------
CREATE TABLE `message` (
`id_message` int(11) NOT NULL auto_increment,
`mess` text NOT NULL,
`login` varchar(30) NOT NULL default '',
PRIMARY KEY (`id_message`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
INSERT INTO `message` VALUES (1, 'salut', 'badze');
INSERT INTO `message` VALUES (2, 'vache', 'fabien');
________________________________________________________________
voila, normalement les tables sont relié car j'ai "login" dans les 2 tables.
N'importe quel requete que je vais faire ne va pas marché a partir du moment que je relie les 2 tables exemples:
select password
from client c, message m
where c.login = m.login
and mess = "salut";
elle ne veut rien dire mais c'est le principe qui importe. J'ai appris le sql pendant 1 an, soit on m'a appris que des conneries soit il faut faire une manipulation dans PhpMyadmin pour dire que les tables sont reliés.