Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème en SQL

Incrémentation de la plus grande valeur d'un champ

    21 février 2006 à 17:22:02

    Bonjour, alors voilà le problème: je voudrais pouvoir dans une requête d'insertion incrémenter d'un la plus grande valeur d'un champ, j'ai donc éssayer de cette manière:
    INSERT
    INTO '. $config['sql']['prefixe'] .'menu(mu_nom, mu_cote, mu_ordre)
    VALUES ("plz", 1, GREATEST(mu_ordre) + 1)


    Mais j'ai une érreur, rien de bien éxtraordinaire l'érreur de base, j'ai fait une erreur de syntaxe! près de ') + 1)' à la ligne 3.

    Si je remplace GREATEST par MAX même résultat.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2006 à 17:24:46

      Lu,

      Rajoute des parenthèses (GREATEST(mu_ordre) + 1)

      ++
      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2006 à 17:28:08

        Bien éssayé mais aucun changement, merci quand même.
        • Partager sur Facebook
        • Partager sur Twitter
          21 février 2006 à 17:30:20

          Lu,

          Fille moi la structure de ta table STP que je puisse faire des tests chez moi.

          CREATE TABLE ...


          ++
          • Partager sur Facebook
          • Partager sur Twitter
            21 février 2006 à 17:34:39

            Mais avec plaisir:
            CREATE TABLE `cms_menu` (
              `mu_id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
              `mu_nom` varchar(20) NOT NULL DEFAULT '',
              `mu_cote` smallint(1) UNSIGNED NOT NULL DEFAULT '0',
              `mu_admin` smallint(1) UNSIGNED NOT NULL DEFAULT '0',
              `mu_ordre` smallint(1) UNSIGNED NOT NULL DEFAULT '0',
              PRIMARY KEY  (`mu_id`)
            ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_bin AUTO_INCREMENT=10 ;
            • Partager sur Facebook
            • Partager sur Twitter
              21 février 2006 à 17:47:41

              Un peu de données avec stp !
              • Partager sur Facebook
              • Partager sur Twitter
                21 février 2006 à 17:52:22

                --
                -- Contenu de la table `cms_menu`
                --

                INSERT INTO `cms_menu` VALUES (1, 'Menu 1', 0, 0, 1);
                INSERT INTO `cms_menu` VALUES (2, 'Menu 2', 0, 0, 2);
                INSERT INTO `cms_menu` VALUES (3, 'Menu 3', 0, 0, 3);
                INSERT INTO `cms_menu` VALUES (4, 'Menu 4', 1, 0, 4);
                INSERT INTO `cms_menu` VALUES (5, 'Menu 5', 1, 0, 5);
                INSERT INTO `cms_menu` VALUES (6, 'Menu 6', 1, 0, 6);
                • Partager sur Facebook
                • Partager sur Twitter
                  21 février 2006 à 17:54:22

                  ;)

                  INSERT INTO cms_menu(mu_id,mu_nom, mu_cote, mu_admin, mu_ordre)
                  VALUES ('','plz', 1, 0, 'MAX(mu_ordre)+1')
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 février 2006 à 17:59:54

                    9a ne retourne pas d'érreur mais le champ ordre vaut 0!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 février 2006 à 18:08:28

                      Effectivement, et tout a fait logique il prends ca pour du texte, le champs n'est pas fait pour, il met 0 valeur par defaut.

                      Bon je crois que l'on peut pas le faire en une seule requete !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 février 2006 à 18:10:19

                        Bon bha très bien en attente d'une réponse, si elle éxiste, je ferais avec deux requêtes :'(.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 février 2006 à 18:18:24

                          Il y a aussi, mais ce n'est pas exactement ce que tu cherches...

                          LAST_INSERT_ID()

                          ---

                          J'ai fait une recherche dans la DOC, dans d'autres forums => rien du tout et tu n'es pas le seul à avoir poser la question.

                          Ah oui dans la documentation, j'ai vu qu'il prévoyait d'adapter MAX pour ce genre de cas. Mais bon à mon avis on peut attendre longtemps.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 février 2006 à 19:35:00

                            C'est gentil de te donner tant de mal je connaissait aussi le LAST_INSERT_ID, d'ailleurs j'en profite pour poser la question, pour l'instant j'utiliser mysql_insert_id(), qui est l'équivalent en php car je sais que le SQL est lent, donc est-ce que quelqu'un sait laqu'elle de ces deux méthodes est la plus rapide?
                            Puis je n'ai pas fait de test mais il pourait il y avoir un problème avec l'instruction SQL, par éxemple pour mes menus j'ai une requête qui créée le menus et une requête d'insertion qui créée les liens du menu, vu qu'il y as plusieurs lien je me trouve dans une boucle, donc il se pourait que l'instruction SQL renvoit l'id du premier lien lors de l'enregistrement deu deuxième.

                            Mais bon ça c'est pas très grave.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Problème en SQL

                            × 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