PHP/MSQL requête complexe

Résolu/Fermé
Spykees Messages postés 16 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 17 octobre 2010 - 16 oct. 2010 à 15:49
Spykees Messages postés 16 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 17 octobre 2010 - 17 oct. 2010 à 12:50
Bonjour,

J'ai un souci avec l'une de mes requête j'ai 3 table, une article, une matiere et la dernière pour la liaison artplat.

Voici mon code

$req = "SELECT article.titre, matiere.nom FROM article,matiere,artplat WHERE article.id_article = artplat.idarticle" ; 

$sql = mysql_query($req); 

while($data = mysql_fetch_array($sql)) 
{ 
echo 'Nom du matériaux: '.$data['titre'].' disponible en '.$data['nom'].'<br>'; 
} 



le problème c'est que ca m'affiche au temps de titre qu'il y a d'enregistrements dans la table artplat donc si j'ai deux matières, je me retrouve avec

planche en bois
planche en fer

au lieu de planche en bois et en fer

comment faire ma requête pour ne pas doubler le titre mais garder la boucle while pour l'affichage des autres articles ?


Merci d'avance de votre aide

A voir également:

2 réponses

En tout SQL :
SELECT
article.id_article,
article.titre,
GROUP_CONCAT( matiere.nom SEPARATOR ' et ' ) AS matiere
FROM article
INNER JOIN artplat ON article.id_article = artplat.idarticle
INNER JOIN matiere ON matiere.id_matiere = artplat.idmatiere
GROUP BY article.id_article

Avec PHP :
$compositions = array();
while($data = mysql_fetch_array($sql))
{
$compositions[ $data['article'] ][] = $data['matiere'];
}
foreach( $compositions as $nom => $matieres )
{
echo 'Nom du matériaux: '.$nom.' disponible en '.implode( ' et ' , $matieres).'<br>';
}
0
Spykees Messages postés 16 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 17 octobre 2010
16 oct. 2010 à 17:39
jDéjà merci pour cette aide, j'ai effectuer le code de la façon suivante :

$req = "SELECT
article.id_article,
article.titre,
GROUP_CONCAT( platform.nom SEPARATOR ' et ' ) AS platform
FROM article
INNER JOIN artplat ON article.id_article = artplat.idarticle
INNER JOIN platform ON platform.id_matiere = artplat.idmatiere
GROUP BY article.id_article " ;

$sql = mysql_query($req);

$compositions = array();
while($data = mysql_fetch_array($sql))
{
$compositions[ $data['article'] ][] = $data['matiere'];
}
foreach( $compositions as $nom => $matieres )
{
echo 'Nom du matériaux: '.$nom.' disponible en '.implode( ' et ' , $matieres).'<br>';
}


malheureusement ca me donne l'erreur:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/1f8890efd1fe693ea12cf874c43a90b9/web/testeconnect.php on line 61
0
Ce sont 2 solutions différentes :)
Vraisemblablement, il y a une erreur SQL dans cette dernière version, possible qu'un champ y soit mal nommé.

Retournes à la 1ère version de SQL et gardes ce nouveau PHP
0
Spykees Messages postés 16 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 17 octobre 2010
17 oct. 2010 à 12:50
haaaa mais quel idiot, j'ai renommé les champs avec la deuxième variante du script ... décidément, Je te remercie beaucoup :)
0