PHP/MYSQL
Résolu/Fermé
A voir également:
- PHP/MYSQL
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Expert php pinterest - Télécharger - Langages
- Alert php ✓ - Forum PHP
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
14 réponses
dindoun
Messages postés
1028
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
17 février 2017
135
1 oct. 2008 à 14:01
1 oct. 2008 à 14:01
donne ta table en clair
Désolé voici la requete SQL pour afficher les partenaires:
"SELECT * FROM PARTENAIRES,ETUDIANTS WHERE ETUDIANTS.IDetudiant<>'Login' AND (PARTENAIRES.IDetudiant='login' OR PARTENAIRES.IDdupartenaire='login') AND (ETUDIANTS.IDetudiant=PARTENAIRES.IDetudiant OR ETUDIANTS.IDetudiant=PARTENAIRES.IDdupartenaire)"
"SELECT * FROM PARTENAIRES,ETUDIANTS WHERE ETUDIANTS.IDetudiant<>'Login' AND (PARTENAIRES.IDetudiant='login' OR PARTENAIRES.IDdupartenaire='login') AND (ETUDIANTS.IDetudiant=PARTENAIRES.IDetudiant OR ETUDIANTS.IDetudiant=PARTENAIRES.IDdupartenaire)"
Voici mes tables
CREATE TABLE `PARTENAIRES` (
`IDpartenaires` int(11) NOT NULL auto_increment,
`IDetudiant` varchar(100) NOT NULL default '',
`iddupartenaire` varchar(100) NOT NULL default '',
PRIMARY KEY (`idpartenariat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `PARTENAIRES` (
`IDpartenaires` int(11) NOT NULL auto_increment,
`IDetudiant` varchar(100) NOT NULL default '',
`iddupartenaire` varchar(100) NOT NULL default '',
PRIMARY KEY (`idpartenariat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Bonjour,
J'ai quelques question par rapport à vos 2 tables :
CREATE TABLE `PARTENAIRES` (
`IDpartenaires` int(11) NOT NULL auto_increment,
`IDetudiant` varchar(100) NOT NULL default '',
`iddupartenaire` varchar(100) NOT NULL default '',
PRIMARY KEY (`idpartenariat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant`)
1- Pour quoi IDetudiant de 'PARTENAIRES' (varchar(100)) n'a pas la même dimension
du IDetudiant de ETUDIANTS (int(11)) ?.
2- Pourquoi iddupartenaire de 'PARTENAIRES' de type (varchar(100)) et pas int(11)
comme on pourrait s'attendre par analogie avec IDetudiant de ETUDIANTS ?.
3- Pouvez vous définir plus explicitement la pseudo PK `idpartenariat` : de quoi est elle constituée comme PK ?.
Thank's.
___________________________________________________________________________________________
Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire un chtit tour à la "foire du slip"
... une vraie bande de mariolles dis donc - ca fait pitié - chuis r'monté vite fait ben fait :> (Jésus Christ).
J'ai quelques question par rapport à vos 2 tables :
CREATE TABLE `PARTENAIRES` (
`IDpartenaires` int(11) NOT NULL auto_increment,
`IDetudiant` varchar(100) NOT NULL default '',
`iddupartenaire` varchar(100) NOT NULL default '',
PRIMARY KEY (`idpartenariat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant`)
1- Pour quoi IDetudiant de 'PARTENAIRES' (varchar(100)) n'a pas la même dimension
du IDetudiant de ETUDIANTS (int(11)) ?.
2- Pourquoi iddupartenaire de 'PARTENAIRES' de type (varchar(100)) et pas int(11)
comme on pourrait s'attendre par analogie avec IDetudiant de ETUDIANTS ?.
3- Pouvez vous définir plus explicitement la pseudo PK `idpartenariat` : de quoi est elle constituée comme PK ?.
Thank's.
___________________________________________________________________________________________
Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire un chtit tour à la "foire du slip"
... une vraie bande de mariolles dis donc - ca fait pitié - chuis r'monté vite fait ben fait :> (Jésus Christ).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci
Oui j ai vu le probleme des dimensions parceque je les refait à la hate j ai fait juste un morceau la ou il ya le probleme...
idpartenaire au lieu idpartenariat
Oui j ai vu le probleme des dimensions parceque je les refait à la hate j ai fait juste un morceau la ou il ya le probleme...
idpartenaire au lieu idpartenariat
Re,
Je crois que vous vous cassez la tête pour rien avec 2 tables :
Une seule suffit - soit cette table ETUDIANT-PARTENAIRES :
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
'IDpartenaire' int(11) NOT NULL default 0
PRIMARY KEY (`IDetudiant', 'IDpartenaire`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
C'est une "self-referencing" table car IDpartenaire (PK2) devra être référencée dans la table même sur IDetudiant (PK1).
En mettant la PK sur le couple (IDetudiant, IDpartenaire) - ca permettra à votre table d'évoluer sans problèmes si un jour vous envisagez des partenariats à plus de 2 personnes - non ?.
Vous voyez.
Salut.
Je crois que vous vous cassez la tête pour rien avec 2 tables :
Une seule suffit - soit cette table ETUDIANT-PARTENAIRES :
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
'IDpartenaire' int(11) NOT NULL default 0
PRIMARY KEY (`IDetudiant', 'IDpartenaire`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
C'est une "self-referencing" table car IDpartenaire (PK2) devra être référencée dans la table même sur IDetudiant (PK1).
En mettant la PK sur le couple (IDetudiant, IDpartenaire) - ca permettra à votre table d'évoluer sans problèmes si un jour vous envisagez des partenariats à plus de 2 personnes - non ?.
Vous voyez.
Salut.
Ma solution est valable avec une table de référence ETUDIANT bien sur :
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ET en modifiant ainsi celle du POST précédent :
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL 0,
'IDpartenaire' int(11) NOT NULL default 0
PRIMARY KEY (`IDetudiant', 'IDpartenaire`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Exemple : partenaires des étudiants 1 et 2 :
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.IDetudiant = 1 or A.IDetudiant = 2)
Exemple : étudiants non partenaires avec les étudiants 1 et 2 :
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire <> C.IDetudiant
AND (A.IDetudiant = 1 or A.IDetudiant = 2)
------------------------------------------------------------------------------------------------------------------------------------
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ET en modifiant ainsi celle du POST précédent :
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL 0,
'IDpartenaire' int(11) NOT NULL default 0
PRIMARY KEY (`IDetudiant', 'IDpartenaire`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Exemple : partenaires des étudiants 1 et 2 :
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.IDetudiant = 1 or A.IDetudiant = 2)
Exemple : étudiants non partenaires avec les étudiants 1 et 2 :
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire <> C.IDetudiant
AND (A.IDetudiant = 1 or A.IDetudiant = 2)
------------------------------------------------------------------------------------------------------------------------------------
Re,
J'ai involontairement mis ce POST sur "résolu" alors que je n'en avais pas la responsabilité nromalement.
C'est une erreur de manip. (:<) !!.
Sorry.
J'ai involontairement mis ce POST sur "résolu" alors que je n'en avais pas la responsabilité nromalement.
C'est une erreur de manip. (:<) !!.
Sorry.
Oupss,
Voici les corrections pour la 2éme requête :
Exemple : tous les étudiants non partenaires avec les étudiants 1 et 2 :
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE (IDetudiant <> 1 AND IDetudiant <> 2)
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.IDetudiant = 1 OR A.IDetudiant = 2)
)
Ce sera tout - merci pour vos remarques.
Voici les corrections pour la 2éme requête :
Exemple : tous les étudiants non partenaires avec les étudiants 1 et 2 :
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE (IDetudiant <> 1 AND IDetudiant <> 2)
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.IDetudiant = 1 OR A.IDetudiant = 2)
)
Ce sera tout - merci pour vos remarques.
desolé du retard je viens juste de rentrer...
Le probleme ce n est pas de comparer etudiant 1 et etudiant 2 avec les autres mais de comparer etudiant 1 seul avec les autres .
Le probleme ce n est pas de comparer etudiant 1 et etudiant 2 avec les autres mais de comparer etudiant 1 seul avec les autres .
Re,
Peux tu mettre à statut non résolu stp ??...
Merci !!.
"Le probleme ce n est pas de comparer etudiant 1 et etudiant 2 avec les autres mais de comparer etudiant 1 seul avec les autres ."
J'te prends au mot :
==>
Exemple : partenaires de l'étudiant 1 :
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND A.IDetudiant = 1
Tous les étudiants non partenaires avec l'étudiant 1 :
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE IDetudiant <> 1
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.IDetudiant = 1)
)
_________________________________________________________________________________
Dans tous les cas - j'espère que mes tables te conviennent- peu pas faire mieux pour éviter une "usine à gaz".
Avec ces tables - tu peut faire n'importe quelle requête - le structure est souple et simple.
Ça te convient ou pas ?.
A+.
Peux tu mettre à statut non résolu stp ??...
Merci !!.
"Le probleme ce n est pas de comparer etudiant 1 et etudiant 2 avec les autres mais de comparer etudiant 1 seul avec les autres ."
J'te prends au mot :
==>
Exemple : partenaires de l'étudiant 1 :
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND A.IDetudiant = 1
Tous les étudiants non partenaires avec l'étudiant 1 :
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE IDetudiant <> 1
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.IDetudiant = 1)
)
_________________________________________________________________________________
Dans tous les cas - j'espère que mes tables te conviennent- peu pas faire mieux pour éviter une "usine à gaz".
Avec ces tables - tu peut faire n'importe quelle requête - le structure est souple et simple.
Ça te convient ou pas ?.
A+.
Re !!,
Reprenons tes besoins :
"Je vais afficher pour chaque etudiant qui se connecte dans une liste tous ses partenaires et dans une autre liste tous les autres pour qu'il puisse demander leur partenariat."
Donc :
"Je vais afficher pour chaque etudiant qui se connecte dans une liste tous ses partenaires"
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND A.login = "toto" --> c'est le login de l'étudiant
".... et dans une autre liste tous les autres pour qu'il puisse demander leur partenariat."
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE login <> "toto"
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.login = "toto")
)
Avec :
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL default 0,
'IDpartenaire' int(11) NOT NULL default 0
PRIMARY KEY (`IDetudiant', 'IDpartenaire`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--> pour cette dernière table, mettre les clauses FOREIGN KEY ... REFERENCES blabla
pointant sur la table ETUDIANTS mais je connais pas bien MySql.
Et pis c'est tout je crois.
J'attends tes critiques.
A+.
Reprenons tes besoins :
"Je vais afficher pour chaque etudiant qui se connecte dans une liste tous ses partenaires et dans une autre liste tous les autres pour qu'il puisse demander leur partenariat."
Donc :
"Je vais afficher pour chaque etudiant qui se connecte dans une liste tous ses partenaires"
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND A.login = "toto" --> c'est le login de l'étudiant
".... et dans une autre liste tous les autres pour qu'il puisse demander leur partenariat."
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE login <> "toto"
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant, C.login
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.login = "toto")
)
Avec :
CREATE TABLE `ETUDIANTS` (
`IDetudiant` int(11) NOT NULL auto_increment,
`login` varchar(150) NOT NULL default '',
PRIMARY KEY (`IDetudiant')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL default 0,
'IDpartenaire' int(11) NOT NULL default 0
PRIMARY KEY (`IDetudiant', 'IDpartenaire`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--> pour cette dernière table, mettre les clauses FOREIGN KEY ... REFERENCES blabla
pointant sur la table ETUDIANTS mais je connais pas bien MySql.
Et pis c'est tout je crois.
J'attends tes critiques.
A+.
Oupss,
".... et dans une autre liste tous les autres pour qu'il puisse demander leur partenariat."
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE login <> "toto"
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.login = "toto")
)
Avec :
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL
PRIMARY KEY
REFERENCES ETUDIANTS (IDetudiant)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
'IDpartenaire' int(11) NOT NULL
PRIMARY KEY
REFERENCES ETUDIANTS (IDetudiant)
ON DELETE RESTRICT
ON UPDATE RESTRICT
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Le reste est OK.
ouf.
".... et dans une autre liste tous les autres pour qu'il puisse demander leur partenariat."
SELECT IDetudiant, login
FROM ETUDIANTS
WHERE login <> "toto"
AND
IDetudiant NOT IN
(
SELECT C.IDetudiant
FROM ETUDIANTS AS A, ETUDIANTS-PARTENAIRES AS B, ETUDIANTS AS C
WHERE B.IDetudiant = A.IDetudiant
AND B.IDpartenaire = C.IDetudiant
AND (A.login = "toto")
)
Avec :
CREATE TABLE `ETUDIANTS-PARTENAIRES` (
`IDetudiant` int(11) NOT NULL
PRIMARY KEY
REFERENCES ETUDIANTS (IDetudiant)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
'IDpartenaire' int(11) NOT NULL
PRIMARY KEY
REFERENCES ETUDIANTS (IDetudiant)
ON DELETE RESTRICT
ON UPDATE RESTRICT
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Le reste est OK.
ouf.