PHP/MSQL requête complexe [Résolu/Fermé]

Signaler
Messages postés
16
Date d'inscription
vendredi 15 octobre 2010
Statut
Membre
Dernière intervention
17 octobre 2010
-
Messages postés
16
Date d'inscription
vendredi 15 octobre 2010
Statut
Membre
Dernière intervention
17 octobre 2010
-
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

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>';
}
Messages postés
16
Date d'inscription
vendredi 15 octobre 2010
Statut
Membre
Dernière intervention
17 octobre 2010

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
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
Messages postés
16
Date d'inscription
vendredi 15 octobre 2010
Statut
Membre
Dernière intervention
17 octobre 2010

haaaa mais quel idiot, j'ai renommé les champs avec la deuxième variante du script ... décidément, Je te remercie beaucoup :)