where in et version mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : where in et version mysql

par zeus » 31 janv. 2008, 08:58

Puisque tu as l'air désespéré, je vais directement te donner ce qui me semble être la solution, mais je pense que tu devrais te pencher sur les jointure, une fois que tu auras dormis.

Surtout que si tu as compris le principe des sous-requêtes, ça ne devrait pas être trop difficile ;)

Code : Tout sélectionner

SELECT * FROM add_enseignants ae, add_map_matieres_enseignants as amme, add_matieres as am WHERE amme.id_mat = am.id AND ae.idens = amme.id_ens AND am.cursus = '$showCat' ORDER BY nomens ASC
Pour tes recherches futures, cette requête, sous MySQL, est l'équivalent de

Code : Tout sélectionner

SELECT * FROM add_enseignants ae JOIN add_map_matieres_enseignants as amme ON ae.idens = amme.id_ens JOIN add_matieres as am ON amme.id_mat = am.id WHERE am.cursus = '$showCat' ORDER BY nomens ASC

par Invité » 31 janv. 2008, 07:16

nuit blanches quand tu nous prends...g me sens trèèès seul là.

par Invité » 31 janv. 2008, 06:53

Un autre essai qui donne le même résultat indésirable que ci dessus:
"SELECT * FROM add_enseignants 
	JOIN add_map_matieres_enseignants as amme ON amme.id_mat = am.id
	JOIN add_matieres as am ON am.cursus = '$showCat' ORDER BY nomens ASC"

par Invité » 31 janv. 2008, 06:39

j'ai oublié de rajouter 1 table pour ma 2ème requete:

Code : Tout sélectionner

CREATE TABLE `add_matieres` ( `id` int(4) NOT NULL auto_increment, `nom` varchar(100) NOT NULL default '', `description` text NOT NULL, `duree` varchar(50) NOT NULL default '', `cursus` varchar(255) NOT NULL default '0', `optionnel` tinyint(1) NOT NULL default '0', `published` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=99 ;

par Invité » 31 janv. 2008, 06:37

J'ai tenté ceci qui ne renvoie pas d'erreur, mais chaque enregistrement de la table add_enseignants est affiché autant de fois qu'il y a d'enregistrements.
J'ai 36 enseignants et cette requete me renvoie 36*36 résultats, avec chaque enseignant affiché 36 fois...
SELECT * FROM add_enseignants 
	JOIN add_map_matieres_enseignants as amme 
	JOIN add_matieres as am WHERE amme.id_mat = am.id AND am.cursus = '$showCat' ORDER BY nomens ASC

par Invité » 31 janv. 2008, 05:55

pitié, je galère comme un mulet pou transformer ça.
J'avais déjà posté ici http://www.phpfrance.com/forums/voir_sujet-34510.php il y quelques temps pour ce pb, mais j'ai abandonné pour utiliser des subselect, plus simples.
c'est pas de la paresse, j'y arrive vraiment pas avec les jointures...

par Invité » 31 janv. 2008, 05:37

sais tu ce que ça donnerait pour celle là? chuis désolé mais j'arrive plus à réfléchir...c'est la dernière.
"SELECT * FROM add_enseignants WHERE idens IN (SELECT amme.id_ens FROM add_map_matieres_enseignants as amme, add_matieres as am WHERE amme.id_mat = am.id AND am.cursus = '$showCat') ORDER BY nomens ASC"

par Invité » 31 janv. 2008, 05:31

pardon, ça marche. J'ai pas été capable de faire un copier/coller correct. Merci pour ce conseil.

par Invité » 31 janv. 2008, 05:29

je pige vraiment pas les jointures mais ça serait pas à ce niveau qu'il y a un pb?
ON add_enseignants.idens=add_enseignants.id_ens WHERE

par Sékiltoyai » 31 janv. 2008, 05:29

C'est à dire ? Une erreur ?

par Invité » 31 janv. 2008, 05:26

merci pour ta réponse car je suis vraiment déséspéré.
J'ai tenté ta solution qui est refusée par 4.0

par Sékiltoyai » 31 janv. 2008, 05:22

Essaye un :

Code : Tout sélectionner

SELECT * FROM add_enseignants JOIN add_map_matieres_enseignants ON add_enseignants.idens=add_map_matieres_enseignants.id_ens WHERE add_map_matieres_enseignants.id_mat = $row->id;

where in et version mysql

par Invité » 31 janv. 2008, 05:16

Bonjour à tous,

J'ai créé la requete suivante(subselect) qui marche très bien a partir de mysql 4.1.
SELECT * FROM add_enseignants WHERE idens IN (SELECT id_ens FROM add_map_matieres_enseignants WHERE id_mat = $row->id)
Pb: je viens de découvrir que mon client est sur mysql 4.0 chez son hébergeur. Je voulais mettre le site en ligne la nuit car bcp de connexions la journée. il est 4h du mat et je galère à cause d'un subselect que je dois transformer en jointure.

Quelqu'un saurait-il comment traduire ce subselect en jointure?
Merci bcp pour un petit coup de pouce.

Mes tables

Code : Tout sélectionner

CREATE TABLE `add_enseignants` ( `idens` int(10) NOT NULL auto_increment, `genreens` varchar(5) character set latin1 NOT NULL default '', `nomens` varchar(100) character set latin1 NOT NULL default '', `prenomens` varchar(255) character set latin1 collate latin1_general_ci NOT NULL default '', `fonctionens` varchar(255) character set latin1 NOT NULL default '', `parcoursens` text character set latin1 NOT NULL, `emailens` varchar(255) character set latin1 collate latin1_general_ci NOT NULL default '', `cvens` varchar(255) character set latin1 collate latin1_general_ci NOT NULL default '', `photoens` varchar(255) character set latin1 collate latin1_general_ci NOT NULL default '', `publishedens` tinyint(1) NOT NULL default '0', PRIMARY KEY (`idens`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=46 ; CREATE TABLE `add_map_matieres_enseignants` ( `id` int(10) NOT NULL auto_increment, `id_mat` int(10) NOT NULL default '0', `id_ens` int(10) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=64 ;