Page 1 sur 1

Champs de plusieurs donnees du meme type

Posté : 12 janv. 2012, 09:47
par rimie
Bonjour,

J'ai 3 tables (albums, chansons et chanteurs):
CREATE TABLE albums
id
album

CREATE TABLE chansons
id
idalbum
chanson

CREATE TABLE chanteurs
id
idchanson
chanteur
une seule chanson peut etre chantee par plusieurs chanteurs, resultat souhaite:

Code : Tout sélectionner

chanson1: chanteur1, chanteur3, chanteur8 chanson2: chanteur2, chanteur3, chanteur10, chanteur20 chanson3: chanteur1, chanteur13, chanteur18
que dois je faire exactement pour avoir ce resultat?

est ce qu'il y a un type de champs que l'on peut mettre:
CREATE TABLE chansons
id
idalbum
idchanteurs => les enumerer (chanteur1, chanteur2, chanteur3, chanteur4)
chanson
merci

Re: Champs de plusieurs donnees du meme type

Posté : 12 janv. 2012, 10:29
par Shenryu
Salut,

Il faut que tu fasses une table de jointures entre les deux qui va contenir tes id chansons et chanteurs.

Cela te permettra de connaître :
- les chansons chantées par un chanteur
- les chanteurs qui ont chanté une chanson

Éventuellement, le même procédé peut être utilisé entre album et chanson car la même chanson peut exister sur plusieurs albums ;)

Re: Champs de plusieurs donnees du meme type

Posté : 12 janv. 2012, 11:06
par rimie
quelque chose comme:
CREATE TABLE joinTables
id
idchanson
idchanteur

INSERT INTO joinTables VALUES ('', 1, 1);
,('', 1, 3);
,('', 1, 8);

La chanson 1 a ete chante par chanteur1, chanteur3 et chanteur8

Re: Champs de plusieurs donnees du meme type

Posté : 12 janv. 2012, 11:14
par Shenryu
Voila sauf que pour le coup, tu n'as pas besoin de ta colonne id sur cette nouvelle table.
Ta clé primaire se constitue du couple de tes deux champs idchanson et idchanteur ;)

Re: Champs de plusieurs donnees du meme type

Posté : 12 janv. 2012, 12:52
par Mazarini
Il y a une ambiguïté, entre une chanson=titre et une chanson=enregistrement sonore.

Re: Champs de plusieurs donnees du meme type

Posté : 12 janv. 2012, 14:18
par rimie
Voila sauf que pour le coup, tu n'as pas besoin de ta colonne id sur cette nouvelle table.
Ta clé primaire se constitue du couple de tes deux champs idchanson et idchanteur ;)
J'ai fait cette requete:
$sqlsh = 'SELECT * FROM chansonjoin, chanteurs, chansons WHERE chansonjoin.id = chanteurs.id_ch AND chansonjoin.id = chansons.id_c';
        
        
echo $sqlsh;
$reqsh = $connexion->query($sqlsh);
$resultsh = $reqsh->fetchAll();
		
		$chanteur_list = '';
		foreach($resultsh as $shK=>$shV)
		{
			$chanteur = $shV['chanteur'];
			
			$chanteur_list .= $chanteur;
		}
        echo $chanteur_list;


Mais puisque cette requete se trouve au sein d'une autre requete:
foreach()

{
	//ma requete sqlsh
	
}

ca me donne un resultat:
chanson1: chanteur1, chanteur4, chanteur8

de meme chanson2

chanson2: chanteur1, chanteur4, chanteur8


@Mazarini: titre :)

Re: Champs de plusieurs donnees du meme type

Posté : 17 janv. 2012, 06:40
par rimie
est ce que vous avez une idee sur ce probleme?

Re: Champs de plusieurs donnees du meme type

Posté : 17 janv. 2012, 10:36
par Shenryu
Il faudrait que tu me passes ton modèle mis à jour.. Qu'est-ce que chansonjoin ?

Re: Champs de plusieurs donnees du meme type

Posté : 18 janv. 2012, 05:10
par rimie
Il faudrait que tu me passes ton modèle mis à jour.. Qu'est-ce que chansonjoin ?
c'est la table de jointure des 2 tables (chanteurs, chansons), qui a comme champs les id des 2 tables

Re: Champs de plusieurs donnees du meme type

Posté : 18 janv. 2012, 10:18
par Shenryu
Plutôt quelque chose comme ça alors :
SELECT * FROM chansonjoin, chanteurs, chansons WHERE chansonjoin.idchanteur = chanteurs.id AND chansonjoin.idchanson = chansons.id;

Re: Champs de plusieurs donnees du meme type

Posté : 20 janv. 2012, 05:27
par rimie
non ca marche pas, ca donne des resultats confondus

Re: Champs de plusieurs donnees du meme type

Posté : 20 janv. 2012, 05:43
par rimie
ce qui me bloque c'est le suivant:
// je fais une requete pour recuperere les chansons
SELECT............
$resultChansons = '........';


// je fais une requete pour recupererer les chanteurs, suivant la methode ci-dessus
SELECT............
$resultChanteurs = '........';

foreach($resultChanteurs ...)
{

}


// ici je fais l'affichage des chansons:

foreach($resultChansons ...)
{


}

si je prend le foreach($resultChanteur...) et je la mets au sein de foreach($resultChansons ...) ca me donne:

chanson1: liste des chanteurs.....
chanson1: liste des chanteurs.....
chanson1: liste des chanteurs.....
...

chanson2: liste des chanteurs.....
chanson2: liste des chanteurs.....
chanson2: liste des chanteurs.....
...

ca melange les resultats parce que j'ai fait un double foreach, une au sein de l'autre

et si je le fais separement, ca me donne:

chanson1: dernier chanteur
chanson2: dernier chanteur

il prend juste le dernier chanteur