requête SQL

Répondre
mougeole boiteux
le 12/05/2006 à 14:37
mougeole boiteux
Bonjour

Voilà. J'ai un problème avec une requête SQL dans une page PHP.

Je veux fairre une liste déroulante optionnelle du type :

service 1
cellule 1
cellule 2
cellule 3
cellule 4
service 2
cellule 1
cellule 2
cellule 3
cellule 4
service 3
cellule 1
cellule 2
cellule 3
cellule 4
service 4
cellule 1
cellule 2
cellule 3
cellule 4

On ne soit pouvoir séléctionner que les cellules

Voici mon code


<?php 


$sqla = "SELECT NomService FROM SERVICES";

$reponsea = mysql_query($sqla);


$sqlb = "SELECT NomCellule FRM CELLULES INNER JOIN SERVICES WHERE IdService = RefSevice";

$reponseb = mysql_query($sqlb)

// Ensuite je fais deux boucle imbirqué pour la liste


while ($donneesa = mysql_fetch_array($reponsea))
{

?>

<optgroup label=" <?php echo "$donneesa[ 'NomService']" ?>" >

<?php
while ($donneesb = mysql_fetch_array($reponseb))
{
?>

<option><?php echo "$donneesb[ 'NomCellule']" ?></option>

<?php
}
?>

</optgroup>

<?php
}
?>



Avec ce code j'obtiens cette liste :

service 1
cellule 1
cellule 2
cellule 3
cellule 4
cellule 1
cellule 2
cellule 3
cellule 4
cellule 1
cellule 2
cellule 3
cellule 4
cellule 1
cellule 2
cellule 3
cellule 4
service 2
service 3
service 4

Je suis presque sur que mon erreur viens de la requête $sqlb parce que je l'ai testé dans phpMyAdmin et je n'ai pas obtenu le resultat attendu.

Est-ce que quelqu'un à une idée de l'erreur?

Merci d'avance
zebden
le 12/05/2006 à 15:16
zebden
C'est normal, tu fais la requetes avant la boucle mais de toute façon, tu peux tout regrouper en une seule requête.

<?php

$requete = 'SELECT `t2`.`NomService`, `t1`.`NomCellule` FROM `CELULLES` as `t1` ';
$requete .= 'LEFT JOIN `SERVICES` as `t2` ON (`t1`.`IdService` = `t2`.`RefSevice`) ';

$query = mysql_query($requete) or die(mysql_error());

// Mise en forme ...
?>


Tu as ainsi toutes tes cellules liées au service en une seule requête, après ca reste de la mise en page. Tu peux eventuellement passer par un array intermédiaire avec comme index le nom du service pour parser comme tu le souhaites ensuite.
zebdinou pour les intimes / Blog : http://www.zebden.fr
mougeole boiteux
le 12/05/2006 à 16:37
mougeole boiteux
Salut

Merci pour ta réponse

J'ai corriger mon INNER JOIN WHERE en INNER JOIN ON et ça marche du moins dans phpmyadmin.

Mon problème viens du PHP
J'a fait un petit test sans afficher le résultat dans une liste mais dans une simple page pour simplifier.

Ca donne ceci :

<?php

while ($donneesa = mysql_fetch_array($reponsea))
{
$service = $donneesa['NomService'];
echo "$service ";
while ($donneesb = mysql_fetch_array($reponseb))
{
$cellule = $donneesb['NomCellule'];
echo "Bien joué TINTIN";
echo "$cellule " ;
}

}

?>


résultat sur la page :


service 1
service 2
service 3
service 4


Il ne passe donc pas dans la deuxième boucle.

Ca doit être très con mais là je vois pas.
Est-ce que quelqu'un à une idée?
mougeole boiteux
le 15/05/2006 à 09:13
mougeole boiteux
Salut

Ca y est j'ai trouvé!! smiley

Il ne s'agissait pas que d'une simple mise en forme.
C'est ma requête $sqlb qui était incomplète.

Il fallait en fait 2 condition :

La première condition pour séléctionner les cellules dont le champ RefSrvice est égal au champ IdService.

La deuxième condition sert à préciser qu'on affiche les Cellules dont les champs RefService est égale à l'IdService séléctionné dans la première boucle.

Ce qui nous donne :

<?php

$sqlb = "SELECT NomCellule FROM CELLULES INNER JOIN SERVICES ON IdService = RefService WHERE NomService = '".$donneesa['NomService']."' ORDER BY CodeCel ASC";

?>


Voilà

J'espère que ça pourra servire à quelqu'un.

Salut
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours