jointure requete simple sous phpmyadmin

jointure requete simple sous phpmyadmin - SQL/NoSQL - Programmation

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.

Reply

Marsh Posté le 18-12-2004 à 19:53:19   

Reply

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

Reply

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'

Reply

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 ?

Reply

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

Reply

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

Reply

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

Reply

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?

Reply

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)

Reply

Marsh Posté le 21-12-2004 à 16:50:53    

ben t'as qu'à faire une equi-jointure... pas besoin de foreign key.

Reply

Marsh Posté le 21-12-2004 à 16:50:53   

Reply

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

Reply

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

Reply

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.


Message édité par Badze le 04-01-2005 à 21:22:51
Reply

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 =

Reply

Marsh Posté le 05-01-2005 à 10:52:38    

badze a écrit :


quelle est la difference entre une jointure classique et une équijointure.


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

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed