Trucsweb.com

Forum de discussion

 Forum « Programmation Javascript » (archives)

Re: matrice ou array relationnelle avec jointure

Envoyé: 18 avril 2004, 9h24 par Oznog


Salut,

Ok, je vois. Prend l'habitude de décrire tes besoins. Bien avant de débogguer une solution faut s'assurer que la solution est réellement celle souhaitée.

Ton cas est une "relation de 1 à plusieurs" ! De gros mots mais un classique en programmation. Tellement classique qu'aucun langage ne permet de faire ça tout simplement parceque c'est du domaine des base de données, enfin idéallement.

1. Tu as une base de données.

2. Tu as d'un côté une "table" d'album. (table au sens d'une entité et non pas d'une matrice ou array).

3. De l'autre côté une "table" de titres.

4. Les deux tables sont en relation, lié à partir d'un l'ID unique à chaque album. On appelle ça une jointure à partir d'une clé primaire.

Malheureusement le Javascript ne permet pas (généralement) d'interroger une base de données. Tu dois utiliser une base de données installée sur le serveur et donc jumelée à un langage serveur comme le ASP ou le PHP tous deux munis du langage SQL pour interroger la base. Tu peux lire plusieurs tutoriel sur la question dans la section ASP "Introduction aux SGBD" (http://www.trucsweb.com/ASP/trucs.asp?no=231&type=7) et "Tables relationnelles" (http://www.trucsweb.com/ASP/trucs.asp?no=237&type=7) ou plus techniquement "ActiveX® Data Objects (ADO)" (http://www.trucsweb.com/ASP/trucs.asp?no=176&type=7) et "Jointures et relations INNER, LEFT, RIGHT, UNION..." (http://www.trucsweb.com/ASP/trucs.asp?no=104&type=7).

SOLUTION Javascript
Ensuite, bien que "idéallement" l'usage d'une base de données soit de mise, le principe de table relationnel peut être simulé avec des matrices (array) et l'usage d'index. C'est tout un travail en perspective, bien qu'intéressant. Mais tu n'y arrivera pas en quelques copier/coller !

1. Dans la matrice (array) des pièces, tu as le nom, la durée, et l'ID de l'album peut tout simplement être la position dans la matrice.

Ex:

<html>
<script type="text/javascript" language="javascript">
<!--

function fait_Album(_titre,_description,_jaquette) {
this.titre = _titre;
this.description = _description;
this.jaquette = _jaquette;
}

aAlbums = new Array(7)
aAlbums[0] = new fait_Album("Album 1","Bla bla bla...","image0.gif");
aAlbums[1] = new fait_Album("Album 2","Bla bla bla...","image1.gif");
aAlbums[2] = new fait_Album("Album 3","Bla bla bla...","image2.gif");
aAlbums[3] = new fait_Album("Album 4","Bla bla bla...","image3.gif");
aAlbums[4] = new fait_Album("Album 5","Bla bla bla...","image4.gif");
aAlbums[5] = new fait_Album("Album 6","Bla bla bla...","image5.gif");
aAlbums[6] = new fait_Album("Album 7","Bla bla bla...","image6.gif");

// -->
</script>
</html>

Tu peux ainsi récupérer l'album 6 de cette façon. (tel que vu dans le tutoriel "Tableaux (Array) à deux dimensions" (http://www.trucsweb.com/Javascript/trucs.asp?no=336&type=5))

aAlbums[5].titre;

2. Tu as aussi la matrice des pièces MAIS ATTENTION, tu dois pour chaque pièce garder l'id de l'album associé. Ce sera la jointure pour ou bine récupérer l'album d'une pièce ou bien récupérer LES PIÈCES d,un album :

<html>
<script type="text/javascript" language="javascript">
<!--

function fait_Album(_titre,_description,_jaquette) {
this.titre = _titre;
this.description = _description;
this.jaquette = _jaquette;
}

function fait_piece(_titre,_duree,_idAlbum) {
this.titre = _titre;
this.duree = _duree;
this.idalbum = _idAlbum;
}

aAlbums = new Array(1)
aPieces = new Array(5)

aAlbums[0] = new fait_Album("Album 1","Bla bla bla...","image0.gif");
aPieces[0] = new fait_piece("Piece 1 album 1","5:03",0);
aPieces[1] = new fait_piece("Piece 2 album 1","4:03",0);
aPieces[2] = new fait_piece("Piece 3 album 1","3:03",0);

aAlbums[1] = new fait_Album("Album 2","Bla bla bla...","image1.gif");
aPieces[3] = new fait_piece("Piece 1 album 2","5:03",1);
aPieces[4] = new fait_piece("Piece 2 album 2","4:03",1);
// -->
</script>
</html>

3. Maintenant pour mettre en relation les deux tables...

- Récupérer l'album d'une pièce tu fais :

document.write(aPieces[3].titre + ' (' + aAlbums[aPieces[3].idalbum].titre + ')');

Comme tu peux le voir 'aPieces[3].idalbum' est tout simplement la position du bon album dans la matrice des albums.

- Récupérer TOUTES les pièces d'un album. tu dois boucler la matrice des pièces MASI N'AFFICHER QUE LES PIÈCES DONT L'IDI est celui de l'album. Pour bopucler une matrice, c'est à dire passer du premier élément au dernier tu utiluise une boucle FOR de 0 à la grandeur de la matrice ( length ). Voir "Introduction aux tableaux (Array)" (http://www.trucsweb.com/Javascript/trucs.asp?no=335&type=5) pour plus de détails :

// Pour l'album 2 (position 1) :

var pourLalbum2 = 1;
for (i=0; i<aPieces.length; i++) {
if (aPieces[i].idalbum==pourLalbum2) {
document.write(aPieces[i].titre + ' (' + aPieces[i].duree + ')<br >');
}
}

CODE COMPLET
=============

<html>
<script type="text/javascript" language="javascript">
<!--

function twAlbum(_titre,_description,_jaquette) {
this.titre = _titre;
this.description = _description;
this.jaquette = _jaquette;
}

function twPiece(_titre,_duree,_idAlbum) {
this.titre = _titre;
this.duree = _duree;
this.idalbum = _idAlbum;
}

aAlbums = new Array(1)
aPieces = new Array(5)

aAlbums[0] = new twAlbum("Album 1","Bla bla bla...","image0.gif");
aPieces[0] = new twPiece("Piece 1 album 1","5:03",0);
aPieces[1] = new twPiece("Piece 2 album 1","4:03",0);
aPieces[2] = new twPiece("Piece 3 album 1","3:03",0);

aAlbums[1] = new twAlbum("Album 2","Bla bla bla...","image1.gif");
aPieces[3] = new twPiece("Piece 1 album 2","5:03",1);
aPieces[4] = new twPiece("Piece 2 album 2","4:03",1);

for (i=0; i<aAlbums.length; i++) {
document.write('<p><b>'+aAlbums[i].titre + '</b><br >' + aAlbums[i].description + '<br >');
for (l=0; l<aPieces.length; l++) {
if (aPieces[l].idalbum==i) {
document.write(' - ' + aPieces[l].titre + ' (' + aPieces[l].duree + ')<br >');
}
}
document.write('</p>');
}
// -->
</script>
</html>

Voilà, c'est le principe.

Bonne chance.
Oznog


Réponses

 sp spplus de précision willajp18/4/2004
 sp spRe: matrice ou array relationnelle avec jointure willajp18/4/2004
Aucun médias sociaux
X

Trucsweb.com Connexion

Connexion

X

Trucsweb.com Mot de passe perdu

Connexion

X

Trucsweb.com Conditions générales

Conditions

Responsabilité

La responsabilité des Trucsweb.com ne pourra être engagée en cas de faits indépendants de sa volonté. Les informations mises à disposition sur ce site le sont uniquement à titre purement informatif et ne sauraient constituer en aucun cas un conseil ou une recommandation de quelque nature que ce soit.

Aucun contrôle n'est exercé sur les références et ressources externes, l'utilisateur reconnaît que les Trucsweb.com n'assume aucune responsabilité relative à la mise à disposition de ces ressources, et ne peut être tenue responsable quant à leur contenu.

Droit applicable et juridiction compétente

Les règles en matière de droit, applicables aux contenus et aux transmissions de données sur et autour du site, sont déterminées par la loi canadienne. En cas de litige, n'ayant pu faire l'objet d'un accord à l'amiable, seuls les tribunaux canadien sont compétents.

X

Trucsweb.com Trucsweb

X

Trucsweb.com Glossaire

X

Trucsweb.com Trucsweb

X

Trucsweb.com Trucsweb

Conditions

Aucun message!

Merci.

X
Aucun message!
X

Trucsweb.com Créer un compte

Créer un compte

.
@