IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Aide pour créer des jointures


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Aide pour créer des jointures
    Bonjour et merci d'avance pour votre patience avec un bleu dans le domaine

    Voici déjà les 2 tables :
    albums :
    Nom : Tables Albums.PNG
Affichages : 147
Taille : 11,5 Ko
    auteurs :
    Nom : Tables Auteurs.PNG
Affichages : 135
Taille : 6,1 Ko

    1re étape : afficher les albums d'une série avec le N° du tome + le titre.
    Ci-dessous le code + affichage écran, si le code est bien écrit , ça marche.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    // Connexion à la base
    	$base = mysql_connect ('xxxxxxx', 'xxxxxx', 'xxxxxx');
    	mysql_select_db ('xxxxxx', $base) ;
    ?>
    <html>
    <head>
    	<title>Albums de la série LONESOME</title>
    </head>
    <body>
    	<h1>LONESOME</h1>
    <?php
    // lancement de la requête
    $sql = 'SELECT num, numa, titre
    		FROM albums
    		WHERE idserie="1700"
    		ORDER BY num';
    // Lancement de la requête (mysql_query)
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    // Scan des tuples un par un
    while ($data = mysql_fetch_array($req)) {
    // Affichage
    	echo 'Tome '.$data['num'].' ';
    	echo ' '.$data['numa'].' : ';
    	echo ''.$data['titre'].'<br />'; }
    mysql_free_result ($req);
    mysql_close ();
    ?>
    </body>
    </html>

    Nom : Etape_01.PNG
Affichages : 131
Taille : 5,4 Ko

    2nd étape : ajouter 1 ligne à l'affichage de l'étape 1 avec le nom et prénom du scénariste.
    finalement j'ajouterai le nom du dessinateur et coloriste.

    c'est la que je bloque. Je vais essayé d'être clair Si j'ai bien compris il va falloir utiliser des jointures.

    Dans la table "albums" : 1 colonne "idscenariste".
    Dans la table "auteurs" : 3 colonnes "idauteur", "nom" et "prenom".

    - "idauteur" de la table "auteurs" = "idscenariste". de la table "albums"
    - Valeur du champs "idauteur" et "idscenariste". = 695
    - Auteur : nom = Swolfs
    - Auteur : prénom = Yves

    Je veux finalement voir ceci :

    LONESOME

    Tome 1 : La piste du pêcheur
    Scénariste : Swolfs, Yves

    Tome 2 : Les ruffians
    Scénariste : Swolfs, Yves

    Tome 3 : Les liens du sang
    Scénariste : Swolfs, Yves

    Encore merci pour votre aide...

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Voici mon 1er test qui me renvoi ceci :
    Nom : Test_01.PNG
Affichages : 97
Taille : 7,6 Ko

    avec le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    // lancement de la requête
    $sql = 'SELECT num, numa, titre, idscenariste, idauteur, nom, prenom
    		FROM albums, auteurs
    		WHERE idserie="1700"
    		AND idscenariste = idauteur
    		ORDER BY num';
    // Lancement de la requête (mysql_query)
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    // Scan des tuples un par un
    while ($data = mysql_fetch_array($req)) {
    // Affichage
    	echo 'Tome '.$data['num'].' ';
    	echo ' '.$data['numa'].' : ';
    	echo ''.$data['titre'].'<br />';
    	echo 'Scenariste : '.$data['idscenariste'].'<br /><br />'; }
    mysql_free_result ($req);
    mysql_close ();
    ?>

    Au final j'aimerai voir apparaitre le nom + prénom à la place de l'id de l'auteur, ici 695.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 433
    Points : 40 168
    Points
    40 168
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    En effet, il faut utiliser une simple jointure interne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select AL.num
         , AL.numa
         , AL.titre
         , AU.idauteur
         , AU.nom
         , AU.prenom
    from  albums  as AL
    inner join auteurs as AU
       on AU.idauteur=AL.idscenariste
    where AL.idserie=1700


    Quelques remarques :
    • la requête ne présentera pas les résultats comme souhaité, mais avec toutes les colonnes sur une seule ligne.
      C'est au traitement de faire la mise en forme
    • les cardinalités entre les tables ne sont pas bonnes : il est très fréquent qu'un ouvrage (qu'il s'agisse d'un film, d'un livre ou de tout autre média) ait plusieurs auteurs, plusieurs scénaristes, plusieurs dessinateurs...
    • la répétition de colonnes (et non pas de "champs") est exactement ce qu'il ne faut pas faire. Par exemple perso1, perso2, perso3 et perso4 ça ne va pas
    • si la colonne idserie est de type numérique, alors il ne faut pas mettre de quotes : where idserie=1700
    • si elle est de type char, alors ce sont de simples quotes et non des doubles qu'il faut utiliser : where idserie='1700'
    • l'ajout d'alias de table (FROM ... AS ....) facilite la compréhension de la requête : on sait d'emblée dans quelle table on récupère chaque colonne.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci escartefigue ,
    Je regarde ça et j'essaie d'ajouter le dessinateur et le coloriste.
    Est-ce possible d'ajouter 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INNER JOIN auteurs AS AU
    			ON AU.idauteur=AL.idscenariste
    avec AU.idauteur=AL.iddessinateur et AU.idauteur=AL.idcoloriste ?

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 433
    Points : 40 168
    Points
    40 168
    Billets dans le blog
    9
    Par défaut
    on peut ajouter d'autres jointures bien entendu.

    Mais il faudrait surtout commencer, si possible, par revoir le modèle de données qui est complètement bancal.
    Un modèle de données bancal c'est des données dont l'intégrité est en danger, des fonctionnalités pauvres (par exemple : limitation du nombre d'auteurs), des performances très dégradées et des requêtes complexes.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Mais il faudrait surtout commencer, si possible, par revoir le modèle de données qui est complètement bancal.
    comment tu vois que c'est bancale ?

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 433
    Points : 40 168
    Points
    40 168
    Billets dans le blog
    9
    Par défaut
    Exemples :
    1. le pseudo est dans la table AUTEUR, mais, un même auteur écrit parfois sous différents pseudo. Le pseudo est donc un attribut de l'ouvrage et non de l'auteur.
    2. avoir côte à côte dans la table ALBUM iddessinateur, idscénariste et idcoloriste
      si le document concerné n'a pas de dessinateur ou pas de coloriste la colonne correspondante est inutile
      si le document concerné a plusieurs scénaristes ou plusieurs dessinateurs, ce qui est très courant, on perd des informations
    3. avoir des colonnes nommées perso1, perso2... est également très suspect. S'il s'agit de stocker le nom de 4 personnages du livre, on tombe dans le même travers que le point précédent
    4. avoir mis le scénario dans la table AUTEUR implique qu'un auteur n'a qu'un et un seul scénario et qu'un scénario n'a qu'un seul auteur
    5. qu'est-ce qu'une colonne COULEUR vient faire dans une table AUTEUR...
    6. comme l'album possède une date d'achat, il faut comprendre que c'est un exemplaire d'album et non pas un livre : deux exemplaires pouvant être achetés à des dates différentes. Mais en ce cas, le titre du livre ne devrait pas apparaître ici car il faudra répéter le même titre à chaque exemplaire du même livre, d'où une redondance et un risque d'erreur, pareil pour les FK iddessinateur, idscénariste et idcoloriste qui ne doivent évidemment pas être positionnées dans l'exemplaire, mais dans le livre.
      Il faut bien distinguer
      - le livre : par exemple "les misérables" de Victor Hugo
      - l'édition : "les misérables" parue chez Grasset et l "les misérables" parue chez Galimard
      - l'exemplaire : "les misérables" paru chez Grasset et acheté dans la librairie "j'aime lire", rue tartempion à trifouilli les oies
    7. de plus le modèle est très pauvre, vous ne vous intéressez pas aux éditions ? Pas besoin du code marchand ISBN ? Ni de la "cote" bibliothèque (rien à voir avec le prix estimé, c'est un code de classement), etc. ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2021
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Déjà merci de prendre le temps pour me répondre

    - Pour info je ne maitrise pas le Base De Données. CàD que je suis tributaire d'un logiciel qui générer ma BdD donc je ne peux pas modifier les tables, colonnes etc.
    - Les colonnes "Perso" sont utilisées pour stocker des infos personnelles qui ne figures pas d'origine dans le logiciel donc, aucun rapport avec les auteurs.
    - La colonne "couleur" = coloriste au même titre que "scenario" = scénariste et "dessin" = dessinateur.
    - Pour les différentes colonnes, comme dit plus haut, je suis tributaire d'un logiciel, voir ci-dessous les champs que je peux rentrer. Malheureusement quand je génère les fichiers SQL pour remplir la BdD certain champs comme le prix d'achat n'est pas pris en compte. Il faudrait créer une appli. pour générer tous les champs mais là, c'est une autre histoire
    Nom : BD gest.PNG
Affichages : 79
Taille : 107,6 Ko

    --------------------

    J'ai repris mon code mais je n'arrive pas à résoudre le problème des différents auteurs. CàD que je ne sais pas comment lui dire pour différencier les noms/prénoms/pseudos pour le scénariste/dessinateur et coloriste. Actuellement je pense qu'il y à qu'un nom etc. pour ma requête et non 3.
    ...VOIR LE RESULTAT DE LA PAGE...
    Le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?php
    // lancement de la requête
    	$sql =	'
    			SELECT	AL.idserie
    				,	AL.idalbum
    				,	AL.num
    				,	AL.numa
    				,	AL.titre
    				,	AL.idscenariste
    				,	AL.editeur
    				,	AL.collection
    				,	AL.edo
    				,	AL.perso1
    				,	AL.perso2
    				,	AL.perso3
    				,	AL.format
    				,	AL.dateachat
    				,	AL.coteactuelle
    				,	AL.dl
    				,	AL.nbpages
    				,	AL.reference
    				,	AL.integrale
    				,	AL.horsserie
    				,	AL.editionlimitee
    				,	AL.broche
    				,	AL.perso4
    				,	AL.commentaire
    				,	AL.couverture				
    				,	SC.nom
    				,	SC.prenom
    				,	SC.pseudo
    				,	DE.nom
    				,	DE.prenom
    				,	DE.pseudo
    				,	CO.nom
    				,	CO.prenom
    				,	CO.pseudo
    			FROM albums AS AL
    			INNER JOIN auteurs AS SC
    			ON SC.idauteur = AL.idscenariste
    			INNER JOIN auteurs AS DE
    			ON DE.idauteur = AL.idscenariste
    			INNER JOIN auteurs AS CO
    			ON CO.idauteur = AL.idscenariste
    			WHERE AL.idserie=590';
    // Lancement de la requête (mysql_query)
    	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    // Scan des tuples un par un
    	while ($data = mysql_fetch_array($req))
    	{
    // Affichage
    	echo 'Tome '.$data['num'].' ';
    	echo ' '.$data['numa'].' : ';
    	echo ''.$data['titre'].'<br />';
    	echo 'Scenario : '.$data['SC.nom'].'';
    	echo ' '.$data['SC.prenom'].'';
    	echo ' ('.$data['SC.pseudo'].')<br />';
    	echo 'Dessins : '.$data['DE.nom'].'';
    	echo ' '.$data['DE.prenom'].'';
    	echo ' ('.$data['DE.pseudo'].')<br />';
    	echo 'Couleurs : '.$data['CO.nom'].'';
    	echo ' '.$data['CO.prenom'].'';
    	echo ' ('.$data['CO.pseudo'].')<br /><br />';
    	}
    	mysql_free_result ($req);
    	mysql_close ();
    ?>

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 433
    Points : 40 168
    Points
    40 168
    Billets dans le blog
    9
    Par défaut
    Même si c'est un logiciel qui crée la BDD, peut-être offre-t-il des possibilités pour agencer les tables entre elles librement (un peu comme l'interface de microsoft Access) ?
    Si c'est le cas, il faut reprendre à ce stade, car en l'état, vous n'arrivez jamais à vos fins.
    Si ce logiciel ne permet pas d'établir un modèle de données qui correspond aux règles de gestion, comme par exemple le fait qu'un livre peut avoir plusieurs auteurs, zéro à plusieurs coloristes, zéro à plusieurs dessinateurs etc. alors il est bon pour la poubelle.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2015, 16h31
  2. [XL-2007] Besoin d'aide pour créer un tableau qui va incrémenter automatiquement des onglets
    Par Bernardini dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2015, 18h40
  3. Besoin d'aide pour créer des boutons de lecture
    Par bidays dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/07/2012, 20h51
  4. Réponses: 17
    Dernier message: 17/06/2012, 14h17
  5. demande d'aide pour créer des scripts en Javascript
    Par blueyes29 dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 28/12/2010, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo