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

PHP & Base de données Discussion :

Probleme Sql compter nombre champs par son ID [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut Probleme Sql compter nombre champs par son ID
    Bonsoir ,

    Voila j'ai un petit soucis avec ma BDD , en fait je m'explique ;
    Table "tuto"
    id_tuto int(11)
    id_user int(11)
    nom_logiciel
    etc...

    Table "logiciel" (contient 20 entrées )
    id int(11)
    nom_logiciel varchar (255)
    nbr_tuto int (11)

    Lorsque je poste un nouveau tuto via mon formulaire, pas de soucis, il se met à jour et incrémente le champs nbr_tuto de +1 , de ce coté pas de pb
    Seulement lorsque sur ma page d'index je cherche a afficher dans des divs separé une pour chaque logiciel ( 20 dans mon cas )
    Je n'arrive pas à aficher le nombre de tuto pour Firefox par exemple qui possede l'Id 12,(ni meme les infos que je recupererai en table TUTO) il m'affiche toute les infos de la table logiciel sous la forme d'un tableau
    dans une seule div et il boucle la meme chose dans les autres divs

    Bienfaiteur que tu seras celui qui m'aideras

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonsoir,

    nbr_tuto dans la table logiciel est un calcul du nombre de tuto de la table tuto pour le logiciel correspondant dans la table logiciel ? Si oui, c'est pas bien ! Il ne faut pas stocker une données calculé dans une table.

    Pour ton problème de div :
    Code : 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
    //Vue que tu n'a pas préciser qu'elle type de connexion à la BDD que tu utilise, j'utiliserais PDO dans l'exemple.
     
    try{
        $bdd = new PDO('mysql:host=localhost;dbname=monSite', 'user', 'mdp');
    }catch (Exception $e){
        die('Erreur : ' . $e->getMessage());
    }
     
    //Requete SQL qui récupère tous les tuto de Firefox
    $sql = 'SELECT id_tuto, nom_logiciel, les_autres_colonnes FROM tuto WHERE nom_logiciel = :nomLogiciel';
     
    $requete = $bdd->prepare($sql);
    $requete->execute( array('nomLogiciel' => "Firefox") );
    //Tu peu utiliser une variable reçus en $_GET[''] pour afficher les tuto en fonction du choix de l'utilisateur.
     
    while( $tuto = $requete->fetch() ){
        echo '<div class="tuto">
                 <p>Info du tuto :<br />
                      Nom logiciel : ' . $tuto['nom_logiciel'] . '.</p>
               </div>';
    }
    Tu aura pour chaque tuple remonté par ta requête SQL une div contenant les informations du tuto.

    Après a toi d'adapter en fonction de comment tu les souhaite afficher, de ta requête pour remonter tes infos, des variables que tu reçois pour afficher les tuto.

  3. #3
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Merci pour ta reponse, en fait je suis resté flou,
    Ma connexion a la base est en procédural, désolé pour l'oubli,
    Je ne comprend pas bien comment dois je faire alors pour stocké ?
    Puisque je veut qu'a chaque fois que j'ajoute un tutoriel, il soit comptabilisé et me permettre de reafficher le nombre de tutoriel par logiciel plus tard

    Peut tu me refaire la demarche en procedural , ainsi que le systeme de recuperation en GET ( Pas trop dangereux ? )

    Par contre les utilisateurs ne pourront pas poster de tutos, c'est juste moi.
    Merci encore d'avoir répondu

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Effectivement, il faut revoir le modèle de données !

    Règle de gestion :
    Un tutoriel concerne un logiciel et un logiciel peut être concerné par plusieurs tutoriels.

    MCD :
    tutoriel -1,1----concerner----0,n- logiciel

    Tables :
    logiciel (lgc_id, lgc_nom...)
    tutoriel (ttr_id, ttr_id_logiciel...)

    Combien de tutoriels par logiciel ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT l.lgc_id, l.lgc_nom,
    	COUNT(t.ttr_id) AS nombre_tutoriels
    FROM logiciel l
    LEFT OUTER JOIN tutoriel t ON t.ttr_id_logiciel = l.lgc_id
    GROUP BY l.lgc_id, l.lgc_nom
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Tout d'abord merci de tout coeur mais pourrais tu m'expliquer plus en détail
    je suis un novice en php , mais je voudrai que mon site sois bien construit !
    Donc je suis pret a revoir tous si il le faut

    Dit cela s'applique pour une table myisam ?
    Parce que je ne pige rien de rien a la gestion en Innodb

    a ta question combien de tutoriel par logiciel ? je sais pas j'en ajoute tout le temps
    Merci par avance

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    mais pourrais tu m'expliquer plus en détail
    J'ai donné deux liens essentiels pour bien modéliser une base de données relationnelle.
    Il faut commencer par là quand on veut construire une application utilisant une base de données.
    Ce n'est pas l'application qui commande la structure de la BDD ; elle doit au contraire s'y plier.

    Parce que je ne pige rien de rien a la gestion en Innodb
    MyISAM : moteur à abandonner !
    Encore utile aujourd'hui si on a besoin de la recherche FULL TEXT mais la prochaine version de MySQL (peut-être est-elle même déjà sortie) ajoutera ce dernier avantage de MyISAM au moteur Innodb qui en a beaucoup d'autres, notamment la gestion des contraintes de clés étrangères qui sont essentielles pour une base de données bien maîtrisée.

    Pour celui qui écrit les requêtes, le fait que ce soit en MyISAM ou en InnoDB est transparent. Ce choix n'intervient qu'à la création de la table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Donc je devrais convertir mes tables en Innodb ?
    Ca m'embete parce que je ne comprend rien au FK etc...
    Et toute ma bdd et en myisam

    Je vais devoir revoir les bases de chez base....
    Sinon pour mon probleme d'identification de tutoriaux je dois faire une FK deja ?
    Si oui comment adapter a ma structure actuelle ?

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par design_57 Voir le message
    Donc je devrais convertir mes tables en Innodb ?
    C'est conseillé.

    Ca m'embete parce que je ne comprend rien au FK etc...
    Ben il faut s'y mettre si tu veux travailler correctement !
    Ce n'est pas très difficile et il y a des tutoriaux sur DVP.

    Reprenons le modèle que j'ai donné :
    Citation Envoyé par CinéPhil
    MCD :
    tutoriel -1,1----concerner----0,n- logiciel

    Tables :
    logiciel (lgc_id, lgc_nom...)
    tutoriel (ttr_id, ttr_id_logiciel...)
    Les clés primaires sont soulignées et la clé étrangère est en italique.

    Si tu utilises phpMyAdmin pour gérer ta BDD, tu affiches la table tutoriel et tu cliques, dans l'onglet Structure sous la liste des colonnes, sur "Vue relationnelle" (dans de plus anciennes versions de phpMyAdmin, ce lien s'appelait "gestion des relations" je crois).
    Il suffit alors, en face de la colonne ttr_id_logiciel de choisir la colonne logiciel.lgc_id et de sauvegarder. La clé étrangère est créée !
    Il est utile également de fixer le paramètre ON DELECT soit à RESTRICT soit à CASCADE.
    RESTRICT signifie que si tu supprimes un logiciel, le SGBD t'en empêchera s'il existe un tutoriel pour ce logiciel.
    CASCADE signifie que si tu supprimes un logiciel, tous les tutoriels référençant ce logiciel seront automatiquement supprimés. Pratique non ?

    Voici le code SQL des deux tables que j'ai données :
    Code SQL : 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
    CREATE TABLE logiciel
    (
    	lgc_id int(11) NOT NULL AUTO_INCREMENT,
    	lgc_nom int(11) NOT NULL,
    	PRIMARY KEY (lgc_id)
    )
    ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    CREATE TABLE tutoriel
    (
    	ttr_id int(11) NOT NULL AUTO_INCREMENT,
    	ttr_id_logiciel int(11) NOT NULL,
    	PRIMARY KEY (ttr_id),
    	KEY ttr_id_logiciel (ttr_id_logiciel),
    	CONSTRAINT tutoriel_ibfk_2
    		FOREIGN KEY (ttr_id_logiciel)
    		REFERENCES logiciel (lgc_id)
    		ON DELETE CASCADE
    )
    ENGINE=InnoDB DEFAULT CHARSET=latin1;

    Et toute ma bdd et en myisam
    Je suppose qu'elle ne fait pas des centaines de tables ?
    Avec phpMyAdmin c'est assez facile et rapide à modifier.

    Je vais devoir revoir les bases de chez base....
    Une bonne adresse pour cela : SQLPro !

    Sinon pour mon probleme d'identification de tutoriaux je dois faire une FK deja ?
    Oui, j'ai donné le modèle plus haut et dans mon précédent message.
    D'ailleurs, tu avais déjà des clés étrangères dans ta table :
    Table "tuto"
    id_tuto int(11)
    id_user int(11)
    nom_logiciel
    etc...

    Table "logiciel" (contient 20 entrées )
    id int(11)
    nom_logiciel varchar (255)
    nbr_tuto int (11)
    id_user est une bonne clé étrangère référençant la table des utilisateurs.
    nom_logiciel est une mauvaise clé qui référence le nom du logiciel alors qu'il faudrait référencer son identifiant.

    Une clé étrangère référence une clé primaire d'une autre table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Et bien cela a le mérite d'être clair
    Merci en tous cas pour tous ces renseignements,
    Juste une derniere question stp, comment dois je faire maintenant que je suis en InnoDb, pour faire en sorte que lorsque je poste un tuto dans la table tutoriel, il s'incrémente dans la table logiciel et sois recuperer pour etre afficher en sur mon site ?
    Ca fait beaucoup de question je sais mais ton aide m'est tres précieuse.
    et je tiens a te remercier pour le temps que tu veut bien m'accorder.

    L'etape à suivre exactement ?

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    comment dois je faire maintenant que je suis en InnoDb, pour faire en sorte que lorsque je poste un tuto dans la table tutoriel, il s'incrémente dans la table logiciel
    Apparemment, tu as mal compris !
    C'est le tutoriel qui référence le logiciel donc le logiciel pré-existe au tutoriel.

    Si je veux insérer un nouveau tutoriel sur le logiciel Open Modelsphere et que ce logiciel n'existe pas encore dans la table des logiciels, il faut d'abord créer le logiciel.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO logiciel (lgc_nom)
    VALUES ('Open Modelsphere');
     
    INSERT INTO tutoriel (ttr_id_logiciel)
    SELECT lgc_id
    FROM logiciel
    WHERE lgc_nom = 'Open Modelsphere';

    Si tu veux afficher le nombre de tutoriels consacré à un logiciel, tu fais une requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(t.ttr_id) AS Nombre_tutoriels
    FROM logiciel l
    INNER JOIN tutoriel t ON t.ttr_id_logiciel = l.lgc_id
    WHERE l.lgc_nom = 'Open Modelsphere'

    On ne stocke pas une quantité calculable dans le base de données. On la calcule quand on en a besoin. La table logiciel ne doit pas comporter de colonne "nbr_tutoriel".

    Si tu veux la liste de tous les tutoriels d'un logiciel, tu fais une autre requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t.ttr_id, t.ttr_titre
    FROM tutoriel t
    INNER JOIN logiciel l ON l.lgc_id = t.ttr_id_logiciel
    WHERE l.lgc_nom = 'Open Modelsphere'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    D'accord donc si je suis ce que tu dit ,
    Il me faut lorsque je remplit mon formulaire de tuto pour un type de logiciel precis , l'ajouter a la DB si il n'existe pas ?
    C'est bien cela ?
    De même, Il ne faut pas stocker une données calculé dans une table m'a t'on dit plus haut , donc en fait a chaque fois que j'ajouter un tuto j'etait dans le faux, car j'UPDATER a chaque fois la colonne concerner ( genre tutop et tutog.
    Mais alors admettons que je me retrouve avec 2 type de tuto genre des gratuits et des payants comment m'y retrouver ?

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par design_57 Voir le message
    D'accord donc si je suis ce que tu dit ,
    Il me faut lorsque je remplit mon formulaire de tuto pour un type de logiciel precis , l'ajouter a la DB si il n'existe pas ?
    C'est bien cela ?
    Oui.
    De même, Il ne faut pas stocker une données calculé dans une table m'a t'on dit plus haut , donc en fait a chaque fois que j'ajouter un tuto j'etait dans le faux, car j'UPDATER a chaque fois la colonne concerner ( genre tutop et tutog.
    Oui.
    Mais alors admettons que je me retrouve avec 2 type de tuto genre des gratuits et des payants comment m'y retrouver ?
    Et bien tu types tes tutoriels !

    Règle de gestion :
    Un tutoriel est d'un seul type et un type peut qualifier plusieurs tutoriels.

    MCD :
    type -0,n----qualifier----1,1- tutoriel

    Tables :
    type (typ_id, typ_libelle)
    tutoriel (ttr_id, ttr_id_logiciel, ttr_id_type...)

    Si tu n'as que ces deux types, tu peux aussi simplifier en ajoutant à la table tutoriel une colonne ttr_prix et attribuer la valeur 0 aux tutoriels gratuits.
    tutoriel (ttr_id, ttr_id_logiciel, ttr_prix...)

    Reprends la conception en commençant par écrire des règles de gestion claires comme je le présente dans mon billet de blog puis fais un MCD, de préférence avec un logiciel de modélisation. Il en existe des gratuits tels Open Modelsphere ou JMerise.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Extra , je n'y aurai meme pas penser !
    Donc je met une colonne ttr_g et par defaut je lui attribue 0 en champ de type INT ? dans le phpmyadmin et pour le ttr_p la c'est un champ INT aussi ?
    je dois la aussi faire une nouvelle table contenant les deux type ou ajouter dans la table tutorial ?

    Par contre je vois TYPE et libelle et id pourquoi ?

  14. #14
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Donc je met une colonne ttr_g et par defaut je lui attribue 0 en champ de type INT ? dans le phpmyadmin et pour le ttr_p la c'est un champ INT aussi ?
    C'est quoi ttr_g et ttr_p ?
    Tutoriel gratuit et tutoriel payant ?
    Si tu mets deux colonnes, tu pourras avoir un tutoriel à la fois gratuit et payant !
    Si tu ne veux pas indiquer le prix du tutoriel mais seulement le fait qu'il est gratuit ou payant, utilise une colonne booléenne ttr_payant qui sera automatiquement transformée par MySQL en TINYINT(1).
    ttr_payant = 1 => tutoriel payant ;
    ttr_payant = 0 => tutoriel gratuit.

    Si tu n'as que ces deux types et que tu as suffisamment d'information avec le booléen, inutile d'ajouter une table type et une clé étrangère vers cette table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    C'est quoi ttr_g et ttr_p ?
    Tutoriel gratuit et tutoriel payant ?
    Si tu mets deux colonnes, tu pourras avoir un tutoriel à la fois gratuit et payant !
    Si tu ne veux pas indiquer le prix du tutoriel mais seulement le fait qu'il est gratuit ou payant, utilise une colonne booléenne ttr_payant qui sera automatiquement transformée par MySQL en TINYINT(1).
    ttr_payant = 1 => tutoriel payant ;
    ttr_payant = 0 => tutoriel gratuit.

    Si tu n'as que ces deux types et que tu as suffisamment d'information avec le booléen, inutile d'ajouter une table type et une clé étrangère vers cette table.
    La je suis planté, mdr comment les gens verrons le prix du coup style il coute 15 euro ?

  16. #16
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par design_57 Voir le message
    La je suis planté, mdr comment les gens verrons le prix du coup style il coute 15 euro ?
    J'ai donné la solution plus haut :
    Si tu n'as que ces deux types, tu peux aussi simplifier en ajoutant à la table tutoriel une colonne ttr_prix et attribuer la valeur 0 aux tutoriels gratuits.
    tutoriel (ttr_id, ttr_id_logiciel, ttr_prix...)
    Pour les colonnes monétaires, il est recommandé d'utiliser le type DECIMAL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  17. #17
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Pardon j'avais pas vu desolé pour la redondance,
    J'ai installer Open Modelsphere
    Je fait mon model pense tu pouvoir me dire si ca va lorsque qu'il sera établi ?
    je veut dire les jointure etc...

  18. #18
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Voila ma base comme elle l'est actuellement a partir de cela que puis apporter comme innovation ? Optimisation ou clé fk comment les liaison marche t'elle dans le logiciel ?
    Nom : diagramme.jpg
Affichages : 133
Taille : 87,4 Ko

  19. #19
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Tu as fait un schéma représentant des tables (puisqu'elles contiennent déjà les clés étrangères) mais aucune association entre elles.

    De plus, :
    1) Tu devrais externaliser ville et pays, sous peine :
    - de te retrouver plusieurs fois avec la même ville ou le même pays sous des orthographes différentes ;
    - d'avoir Paris en Turquie !
    C'est de la redondance de données et il faut la bannir de la base de données.
    Le bon schéma :
    membre -1,1----habiter----0,n- ville -1,1----situer----0,n- pays

    2) MEDIUMTEXT pour un mot de passe !
    Tu as des mots de passe de plus de 255 caractères toi ?
    Un VARCHAR est largement suffisant, voire un CHAR si tu veux imposer la taille du mot de passe.

    3) Pourquoi stocker une date (de naissance) dans trois colonnes alors qu'il existe le type DATE ?

    4) Tant que possible, évite le type TEXT et préfère le VARCHAR.

    5) Les favoris du membre doivent être externalisés.
    membre -0,n----avoir----(1,1)- favori
    Remarque les cardinalités entre parenthèse qui signifient une identification relative.
    Pour le faire avec Open Modelsphere, tu clique sur le bouton clé puis sur les cardinalités.

    6) Que sont stat, spec, web, quest ?
    Encore des colonnes multivaluées ? À externaliser !
    Au passage, donne un nom clair à tes colonnes.

    7) Tu ne devrais avoir aucune colonne "NULLable".
    NULL est un parasite qui nuit aux performances sur pas mal de requêtes.

    8) Évite le type ENUM, non standard SQL.
    Il vaut mieux faire une association avec une entité type de référence.

    9) "timestamp" est un mauvais nom de colonne car c'est un mot réservé du langage SQL.
    Idem pour "date" dans la table support.
    Et c'est quoi ce timestamp ? Il représente quoi ? Encore une fois, donne un nom clair !

    10) Que sont les colonnes fr et en dans la table pays ?
    S'il s'agit du nom du pays en français et en anglais, nomme ces colonnes nom_fr et nom_en ; ce sera plus clair !

    11) Pourquoi un BIGINT pour (encore !) timestamp dans la table news ?
    Il existe un type timestamp qui se suffit à lui même et qui permet des opérations de date.

    12) Pourquoi avoir fait deux tables tuto_gratuit et tuto_payant qui ont les mêmes colonnes ?
    Une seule table tutoriel est suffisante, avec, comme dit précédemment :
    - soit une colonne booléenne pour indiquer si le tutoriel est gratuit ou payant ;
    - soit une colonne de prix, lequel sera à zéro pour les tutoriels gratuits.

    13) Je vois une colonne idtransact dans la table tutoachat.
    Ceci laisse supposer une référence à une table transact mais je ne la vois pas.

    14) si la colonne "cat" dans tes tables tuto est une catégorie, à externaliser dans une table des catégorie et fais une association entre tutoriel et catégorie.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  20. #20
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Ouah
    1) Externaliser veut dire une table pour chaque champs ville ,pays etc...

    2) MEDIUM aie c'est vrai que c'est pas adapter du tous Hop changer en varchar.

    3) La date de naissance est stocker comme ca car voila mon bout de code pour
    la dite date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (<label for="date_de_naissance" >Date de naissance :</label><select name="bdday" value="<?php if(!empty($_POST['bdday'])) { echo htmlspecialchars($_POST['bdday']);} ?>"><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select><select name="bdmonth" value="<?php if(!empty($_POST['bdmonth'])) { echo htmlspecialchars($_POST['bdmonth']);} ?>" ><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option></select><select name="bdyear" value="<?php if(!empty($_POST['bdyear'])) { echo htmlspecialchars($_POST['bdyear']);} ?>"> <?php $annee_base = date(Y) - 100; $annee = $annee_base; while($annee <= date(Y)) { echo "<option value='".$annee."'>".$annee."</option>"; $annee++; } ?></select> )
    J'avais penser à un foreach mais je sais pas si c'est valable

    4) Mais pour rediger le tutorial le TEXT me semble adapter par rapport au Varchar?

    5) encore cette ligne qui ne me parle pas beaucoup meme en lisant les tutos sur google membre -1,1----habiter----0,n- ville -1,1----situer----0,n- pays ( en langage facile j'ai envie de dire

    6) Stat , Spec , web et quest sont des questions a l'inscription genre vous etes plutot Graphiste ou Programmeur pour stat, etc...

    7) Pb reglé j'ai tout mis en NOT NULL

    8) ENUM , je m'en sers pour un systeme de rang en fait , 0 ,1, 2 pour 0 banni, 1 ADMIN , et 2 pour membre

    9)timestamp je degage de suite sert plus a rien de toute façon

    10) les colonne de prefixes des pays en FR pour France, etc...

    11) Alors la j'ai fait une boulette, reglé en news_date type timestamp

    12) Je corrige immédiatement en 1 table tutoriel avec les colonnes Booleénes pour choisir le prix et une colonne prix qui sera de type ?

    13) table transact realisée, mais que contiendra t'elle exactement a par une colonne id_transact , et nom_transact

    14) oui c'est une categorie (2D ou 3D en fait dans une liste deroulante)

    15) Franchement t'assures, je vien pour un petit probleme en fait c'est toute mon architecture qui est faible
    J'ai du travail et grace a toi je commence a comprendre MERCI

    NB : je te joint la table corrigée je pense avec les associations.
    Nom : diagramme.jpg
Affichages : 172
Taille : 111,1 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XML] Récupérer la valeur d'un champ par son nom
    Par Portekoi dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 06/07/2012, 13h43
  2. Probleme Valeur d'un champ par défault
    Par idrobe dans le forum Access
    Réponses: 1
    Dernier message: 14/07/2006, 15h39
  3. PHP & MySQL : Problème pour compter nombre de tuples ?
    Par ExSter dans le forum Requêtes
    Réponses: 6
    Dernier message: 09/05/2006, 23h03
  4. SQL : compter les champs d'une table
    Par Bboy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 16h02
  5. [SQL] Compter des champs indépendement l'un de l'autre
    Par rippey dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 29/10/2003, 15h35

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