Structure de table sql

MS2I Messages postés 55 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,
J'ai créé ma table bd en php sql , et je veux l'importer dans phpMyAdmin, voilàle strecture de ma table :
CREATE TABLE IF NOT EXISTS 'matable' (

'annee' INT( 50 ) NOT NULL ,
'Mois' INT( 12 ) NOT NULL ,
'P1' FLOAT( 25 ) NOT NULL ,
'P2' FLOAT( 25 ) NOT NULL ,
PRIMARY KEY ( 'annne' , 'Mois' )
) ENGINE = MYISAM DEFAULT CHARSET = latin1;
le probléme c'est que le serveur n'arrive pas à importer la base et il m'affiche comme erreur :
#1072 - Key column 'annne' doesn't exist in table
NB: ma table contient 2 clés primaires ,
quelqu'un peut me résoudre ce problème . Merci d'avance

8 réponses

  1. Bruce Willix Messages postés 12376 Date d'inscription   Statut Contributeur Dernière intervention   2 639
     
    Et si tu mettais un "n" de moins a année juste après PRIMARY KEY ?

    :D

    Remember remember the fifth of November
    Gunpowder, treason and plot.
    I see no reason why gunpowder, treason
    Should ever be forgot...
    0
  2. MS2I Messages postés 55 Statut Membre
     
    Ah oui tu as raison , c'est faute de frappe sur le clavier qui m'ajouter ce "n" et j'ai pas fait attention , merci :D, bonne journée
    0
    1. Bruce Willix Messages postés 12376 Date d'inscription   Statut Contributeur Dernière intervention   2 639
       
      Pas de soucis. Si tu fais bcp d'import/export, hésite pas à ajouter un DROP TABLE devant, histoire d'avoir un truc net à chaque dump.

      Petite question pour ma gouverne: pourquoi une double clé primaire? C'est tellement plus simple de lui demander de générer un index auto (et plus efficace pour tes tables également...)
      0
  3. MS2I Messages postés 55 Statut Membre
     
    En fait j'ai 2 clés primaires car je vais faire ma deuxième table et de coup il y a l'année comme clé commun entre le 2 , je te remercie pour tes conseilles
    0
    1. Bruce Willix Messages postés 12376 Date d'inscription   Statut Contributeur Dernière intervention   2 639
       
      Oui, j'avais bien saisi, mais ce n'est pas la peine d'en faire un clé primaire pour autant. Tu peux faire des JOIN sur des champs qui ne sont pas des clés primaires (c'est d'ailleurs le cas le plus fréquent). La clé primaire sert à deux choses principalement:
      - faire en sorte que l'enregistrement soit unique (c'est sa fonction de base)
      - faire en sorte qu'il soit indexé
      0
  4. MS2I Messages postés 55 Statut Membre
     
    mais j'ai sais pas comment je fais la jointure !!!!
    est que tu peux me donner un exemple , merci d'avance
    0
    1. Bruce Willix Messages postés 12376 Date d'inscription   Statut Contributeur Dernière intervention   2 639
       
      Bien sur. Le concept c'est que tu as deux tables

      matable1:[ID,champ1,champ2,...]
      matable2:[ID,champ1,field2,...]

      Ou les ID sont des autonumbers dont tu ne te préoccupes pas.
      Avec la requête, tu vas en fait créer une nouvelle table, dans laquelle tu mets ce que tu veux. La structure générale d'un SELECT c'est SELECT mes_champs FROM mes_tables WHERE mes_conditions.

      Et c'est quand tu précises les tables que tu fais le join:

      SELECT * FROM matable1,matable2

      te donnera toutes les lignes des deux tables

      SELECT * FROM matable1,matable2 WHERE champ1.matable1=champ1.matable2

      te sortira tous les enregistrements ou champ1 est identique.

      Tu trouveras un très bon tuto ici: https://sqlpro.developpez.com/cours/sqlaz/jointures/
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. MS2I Messages postés 55 Statut Membre
     
    par contre j'ai un autre souci je voudrais bien que tu m'aides merci voilà l'explication :
    Je suis un peu perdu dans nom code et j'arrive pas à voir le résultat que je cherche , en fait j'ai 3 colonnes (Mois , P1, P2) , je veux afficher 12 lignes pour chaque colonne car je dois remplir le 2 chapms P1et P2 selon les mois (12 mois) , je veux pas faire le 12 mois dans une liste déroulante , aussi les valeurs à remplir ça dépend des années de coup j'ai mis les années dans une liste déroulante parce les années ça change avec l'année courante,
    Là je veux que l'utilisateur choisisse l'année de la liste déroulante des années et après il remplisse le 12 lignes du chaque colonne et après quand il clique sur le bouton envoyé les données vont être enregistrer dans ma base, le problème dans mon code c'est :
    - le serveur il prend que la dernière ligne et l'enregistre ( je sais pas quoi faire pour avoir le 12 lignes enregistrés)
    - pour la liste déroulante quand je choisi l'année directement il prend l'année et actualise la page il ne laisse pas l'année choisie affiché et il me permet pas de rentrer les autres valeurs (P1, P2) , espérant que je suis arriver à exprimer bien qu'est ce je veux , est que tu peux m'aider de modifier le code de façon que peux avoir les résultats que je cherche , merci d'avance.
    Voilà mon code source :

    <?php
    require_once('dbconnect.php');
    ?>
    <html>
    <head>
    <title>ESPACE PRIVE </title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link href="styles.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <p align="center" class="titre"><strong>- : : : Les paramètres du bases : : : -</strong></p>
    <br>
    <?php
    //On verifie que le formulaire a été envoye
    if(isset( $_POST['annee']) && isset($_POST['Mois']) && isset($_POST['P1']) && isset($_POST['P2']))
    {
    //mettre les variables dans une requette SQL
    $annee = $_POST['annee'];
    $Mois = $_POST['Mois'];
    $P1 = $_POST['P1'];
    $P2 = $_POST['P2'];
    $sql='INSERT INTO parmetres( annee, Mois, P1, P2 ) VALUES ("'.$annee.'", "'.$Mois.'", "'.$P1.'","'.$P2.'")';
    $requete = $db->query($sql) ;
    }
    else{
    }
    ?>
    <form action="parametre.php" method="post" name="formulaire" >
    <table width="350" border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
    <TR><TH>Mois</TH><TH>P1</TH><TH>P2</TH></TR>
    <tr>
    <td width="144"><input name="P1" type="text" id="P1"></td>
    <td width="144"><input name="P2" type="text" id="P2"></td>
    <td>
    <tr>
    <td width="144"><input name="P1" type="text" id="P1"></td><input name="Mois" type="text" id="Mois"></td>
    </tr>
    <td width="144"><input name="P2" type="text" id="P2"></td>
    <td><input name="Mois" type="text" id="Mois"></td>
    </tr>
    <td>
    <?php
    echo '<select name="annee" onchange="submit()">';
    $annee=date("Y");
    echo '<option value="">Choisir une année...</option>';

    for($i=2010;$i<=$annee ;$i++){
    echo '<option value="'.$i.'">'.$i.'</option>';

    }
    echo '</select>';
    echo '<br /><br />';
    ?>
    </td>
    </tr>
    <tr>
    <td height="50" colspan="2"><div align="center">
    <input type="submit" name="envoi" value="Envoyer">
    </tr>
    </table>
    </form>
    </body>
    </html>
    <html>

    <div class="foot"><a href="accueil.php">Retour à l'accueil</a></div>

    </body>
    </html>
    0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    voir ma réponse dans ton autre post
    0
  8. MS2I Messages postés 55 Statut Membre
     
    c'est fait
    0
  9. MS2I Messages postés 55 Statut Membre
     
    quelqu'un me répond je suis vraiment bloquée j'arrive pas à trouver la solution comment je peux faire pour afficher le 12 lignes de 3 champs , et l'enregistre dans ma base de données , parce que je faisais
    le 1ér input et pour les autre j'arrive pas
    0
    1. Alain_42 Messages postés 5413 Statut Membre 904
       
      vas voir dans l'autre post je viens juste de te mettre une solution qui fonctionne
      0