Page 1 sur 1

ma requete fonctionne pas

Posté : 30 juin 2009, 12:41
par x@v
Je cherche à récupérer les champs du table(profMusique) en fonction du champ instrument qui à dans table(discipline) qui contient la clé étrangère idProfMusique qui est dans table(discipline).

Code : Tout sélectionner

SELECT profmusique.nom, profmusique.prenom, profmusique.nomContact, profmusique.ville, profmusique.mail, profmusique.telephone, profmusique.lienSite, disciplines.anciennete, disciplines.instruments FROM profmusique, disciplines WHERE disciplines.instruments='piano'

Posté : 30 juin 2009, 13:02
par albat
Et la jointure entre tes tables ??? :evil:

Posté : 30 juin 2009, 13:39
par x@v
il me faut créer une condition ?

Posté : 30 juin 2009, 13:41
par albat
Pas forcément.
- Soit tu utilises l'opérateur JOIN ... ON dans ta clause FROM
- soit tu crées une clause WHERE où tu lies un champ de chaque table

Sinon, tu obtiens un produit cartésien ! :afraid:

Posté : 30 juin 2009, 13:46
par x@v
j'ai refais

mon formulaire de recherche :
<form action="recherche.php" type="get">
	<label for="instruments">instrument</label>
	<select name="idProfMusique" id="instruments">
	<?php 
		$sql = "SELECT instruments,idProfMusique FROM disciplines";
   		$result= $connection->select($sql);
   		foreach ($result as $var) {
   			echo '<option value="'.$var['idProfMusique'].'">'.$var['instruments'].'</option>';
   		}?>
	</select>
	<label for="codePostal">codePostal</label>
	<select name="codePostal" id="codePostal">
	<?php 
		$sql = "SELECT codePostal FROM profmusique";
   		$result= $connection->select($sql);
   		foreach ($result as $var) {
   			echo '<option value="'.$var['codePostal'].'">'.substr($var['codePostal'], 0, 2).'</option>';
   		}?>
	</select>	
	<input type="submit" value="recherche" />
</form>


Mon traitement
<?php
include("class/class.pdo.php");
$connection=new Connection();
if(isset($_GET['idProfMusique']) || !empty($_GET['idProfMusique']))
{
	$idProfMusique=$_GET['idProfMusique'];
	$sql= "SELECT profmusique.nom, profmusique.prenom, profmusique.nomContact, profmusique.ville, profmusique.mail, profmusique.telephone, profmusique.lienSite, disciplines.anciennete, disciplines.instruments FROM profmusique, disciplines WHERE disciplines.idProfMusique='$idProfMusique'";
	echo $sql.'<br>';
	$result = $connection->select($sql);
	foreach ($result as $var) {
		echo '<p>'.$var['instruments'].' :: '.$var['nom'].' :: '.$var['prenom'].' :: '.$var['nomContact'].' :: '.$var['ville'].' :: '.$var['mail'].' :: '.$var['telephone'].' :: '.$var['lienSite'].' :: '.date('d-m-Y', $var['anciennete']).'</p>';
	}
?>

Code : Tout sélectionner

SELECT profmusique.nom, profmusique.prenom, profmusique.nomContact, profmusique.ville, profmusique.mail, profmusique.telephone, profmusique.lienSite, disciplines.anciennete, disciplines.instruments FROM profmusique, disciplines WHERE disciplines.idProfMusique='4'

Posté : 30 juin 2009, 14:20
par Yosh
non non non et non,

On te dit de faire une jointure entre les tables de ta requête, pour cela il suffit que tu modifi ta requête comme ci-dessous:
SELECT profmusique.nom, profmusique.prenom, profmusique.nomContact, profmusique.ville, profmusique.mail, profmusique.telephone, profmusique.lienSite, disciplines.anciennete, disciplines.instruments FROM profmusique, disciplines WHERE profmusique.idprofmusique = discipline.idProfMusique AND disciplines.idProfMusique='$idProfMusique'"; 
ou alors avec un JOIN
SELECT profmusique.nom, profmusique.prenom, profmusique.nomContact, profmusique.ville, profmusique.mail, profmusique.telephone, profmusique.lienSite, disciplines.anciennete, disciplines.instruments FROM profmusique INNER JOIN disciplines ON profmusique.idprofmusique = discipline.idProfMusique WHERE disciplines.idProfMusique='$idProfMusique'"; 
EDIT:

je connais pas la structure de tes tables mais en gros la jointure se fait sur l'id de la table 1 en concordance avec l'id de la table 2