Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insérer une colonne

Si elle n'existe pas

Sujet résolu
    31 août 2010 à 16:49:37

    Salut,

    Je cherche à pouvoir ajouter une colonne dans ma table MySQL, si elle n'existe pas.
    En effet, je receptionne des données, mais j'ignore le nombre et les noms des colonnes.

    Je cherche un peu un truc du genre (SQL-PHP inside xD)
    IF !exists(caracteristiques) IN matable:
    ALTER TABLE matable ADD caracteristiques TEXT


    Quelqu'un voit comment le faire en une requete SQL, sans avoir à vérifier en PHP chaque colonne ? (Sachant que je sais pas comment avoir la structure :p )


    Mika.
    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2010 à 17:18:17

      Tu as 2 façon pour contrôler l'existence d'une colonne sous MySQL :
      SHOW COLUMNS FROM table LIKE 'colonne' -- remplacer table par le nom de ta table
      

      ou alors
      SELECT * FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = 'table'
      AND COLUMN_NAME = 'colonne'
      


      Si l'une ou l'autre te renvoit un résultat, c'est que la colonne existe dans ta table.
      • Partager sur Facebook
      • Partager sur Twitter
        31 août 2010 à 17:21:39

        Salut,

        Je pense que je vais faire un SHOW COLUMNS FROM `table` (toutes), en obtenir un tableau PHP, et chercher si chaque colonne existe.
        Si elle n'existe pas, je l'ajoute à un autre tableau, puis je fais une requête par colonne à ajouter...
        C'est toujours mieux que rien =)

        Mika.
        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2010 à 21:42:22

          Ca m'a l'air un peu batard comme système, normalement tes tables n'ont pas à changer au gré des données. C'est aux données de se conformer à une table, pas l'inverse.
          • Partager sur Facebook
          • Partager sur Twitter
            31 août 2010 à 22:45:26

            par précaution il faut rajouter le test sur la schéma. Il peut y avoir deux tables de même nom avec des colonnes de même nom dans plusieurs BD.
            SELECT * FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_SCHEMA = 'schema'
            AND TABLE_NAME = 'table'
            AND COLUMN_NAME = 'colonne';
            

            Edit
            BlueRat, non et oui. Testez et approuvé :)
            Avec PHP ce sera comme avec MySQL QueryBrowser ou autre parce que la table INFORMATION_SCHEMA fait partie de la metabase.
            Donc même en PDO ou autre le SELECT nécessite l'ajout de la condition sur TABLE_SCHEMA.
            En revanche tu as parfaitement raison de préconiser SHOW COLUMNS pour ce cas ou d'autres similaires puisque là il ne travaille que sur la base de connexion.
            • Partager sur Facebook
            • Partager sur Twitter
              31 août 2010 à 23:00:43

              Remarque juste, mais il utilises PHP, la requête ne dépend donc que d'une seule base en théorie.
              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2010 à 23:04:59

                Citation : BlueRat

                Remarque juste, mais il utilises PHP, la requête ne dépend donc que d'une seule base en théorie.



                Mais étant en mutualisé, il est vrai qu'il se peut qu'il y ai d'autres tables du même nom dans d'autres bases ;)
                Bref, utilisant la méthode du SHOW COLUMNS, ce soucis ne se pose pas.

                Mika.

                Ps : @rotoclap : J'aurais pu tout mettre dans une seule colonne "infos", mais dans ce cas, je n'aurais pas pu y faire des recherches, et faire un unserialize() ou un json_decode() prend plus de temps que de prendre que les champs nécessaires. De plus, prendre x champs et pas les autres, je risquerais de passer à coté d'infos ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2010 à 23:10:56

                  OK, mais elles ont quelles têtes, tes infos qui font que tu crées des champs à la volée ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 août 2010 à 23:13:00

                    Ce sont des infos récupérée sur un autre site, récupérée au format JSON.
                    Je ne sais pas à l'avance quel est leur format, même s'il semble que pour les données que j'ai récupéré, il semble que les formats soient les mêmes.
                    Ajouter les champs "à la volée" m'évite surtout de la faire à la main, et d'éviter une erreur ;)

                    Mika.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Insérer une colonne

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown