Page 1 sur 1

problème d'affichage de données

Posté : 14 févr. 2006, 13:50
par Invité
Bonjour.

On m'a aidé sur la création de bases de données mais maintenant j'ai un problème quand à l'affichage. Peut être pourriez vous m'aider. Voici la requete et le résultat.
$vtitrechanson=$_POST["titre_chanson"];

$sql = "SELECT e.nom, i.date, i.lieu, c.nom_chanson, types.type, (SELECT nom FROM artiste WHERE i.id_artiste = id) AS nom_artiste 
FROM ( 
      SELECT id_emission, date, lieu, id_chanson, if( count( id_artiste ) <2, \"Single\", \"Duo\" ) AS TYPE 
      FROM interpretation 
      GROUP BY id_emission, date, lieu, id_chanson 
) AS TYPES , 
interpretation AS i, emission as e, chanson as c 

WHERE types.type = \"Duo\" 
AND i.id_emission = types.id_emission 
AND i.date = types.date 
AND i.id_chanson = types.id_chanson 
AND i.id_emission = e.id 
AND i.id_chanson = c.id
AND c.nom_chanson like \"%$vtitrechanson%\" ";

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

// on fait une boucle qui va faire un tour pour chaque enregistrement 


while($data = mysql_fetch_assoc($req)) 
    { 
    // on affiche les informations de l'enregistrement en cours
     
    echo '<b>'.$data['nom_chanson'].'</b> - '.$data['nom_artiste'].' - Emission diffusée le ('.$data['date'].')<br> '; 
    
    }

echo'<br><br>';
Voilà ce que ça donne :
Old Man River - LAYTON - Emission diffusée le (1928-05-10 00:00:00)
Old Man River - JOHNTONE - Emission diffusée le (1928-05-10 00:00:00)
Old Man River - MouMou - Emission diffusée le (1928-05-10 00:00:00)

Ce que je voudrais avoir, sachant que deux des champs sont identiques pour chaque enregistrement c'est :
Old Man River - LAYTON - JOHNTONE - MouMou - Emission diffusée le (1928-05-10 00:00:00)

Merci pour l'aide que vous saurez m'apporter

Posté : 15 févr. 2006, 00:54
par Cyrano
La chose qui me surprend, c'est que cette requête fonctionne: un ...FROM (SELECT...), je trouve ça original :-k

Ceci dit, le principe utilisable serait le suivant:
- Ajouter une clause ORDER BY sur le nom de la chanson et sur la date de diffusion
- Dans ta boucle While, tu construis un tableau indexé à deux dimensions pour stocker les chansons, les artistes correspondant et les dates de diffusion ce qui te permettra d'avoir plusieurs artistes et éventuellement plusieurs dates de diffusion pour chaque chanson.

Tu crées ensuite ton affichage pour chaque chanson en utilisant ce tableau et en faisant des concaténation quand il y a plusieurs artistes pour la même chanson et éventuellement tu répètes la ligne pour chaque date de diffusion différente.