Ce sujet a été résolu
Utiliser une colonne de type INT et AUTO INCREMENT ?
J'ai visiblement pas le droit de toucher à la structure de la base de données, sinon je l'aurais fait.
il y a 7 mois
J'ai visiblement pas le droit de toucher à la structure de la base de données, sinon je l'aurais fait.
Je sais que les db sqlite on un row id généré automatiquement, est-il possible que MySQL (?) ai ce genre de feature ?
il y a 7 mois
Je sais que les db sqlite on un row id généré automatiquement, est-il possible que MySQL (?) ai ce genre de feature ?
Ça reviendrait à modifier la structure.
J'ai pas le droit de toucher au code de la base de données (à sa structure pour être précis)
Et oui MySQL a une feature équivalente, ce que tu décris revient à faire un AUTO_INCREMENT (qui implique que l'id soit de type int) sur ma clef primaire, donc pas possible.
Ou j'ai mal compris ce que tu voulais dire.
J'ai pas le droit de toucher au code de la base de données (à sa structure pour être précis)
Et oui MySQL a une feature équivalente, ce que tu décris revient à faire un AUTO_INCREMENT (qui implique que l'id soit de type int) sur ma clef primaire, donc pas possible.
Ou j'ai mal compris ce que tu voulais dire.
il y a 7 mois
Ça reviendrait à modifier la structure.
J'ai pas le droit de toucher au code de la base de données (à sa structure pour être précis)
Et oui MySQL a une feature équivalente, ce que tu décris revient à faire un AUTO_INCREMENT (qui implique que l'id soit de type int) sur ma clef primaire, donc pas possible.
Ou j'ai mal compris ce que tu voulais dire.
J'ai pas le droit de toucher au code de la base de données (à sa structure pour être précis)
Et oui MySQL a une feature équivalente, ce que tu décris revient à faire un AUTO_INCREMENT (qui implique que l'id soit de type int) sur ma clef primaire, donc pas possible.
Ou j'ai mal compris ce que tu voulais dire.
Non je parle du fait que sqlite a, en plus du champ ID faisant partit du modèle de la table, un champ « système » Row ID qui est géré automatiquement et de façon séquentielle.
L’idée serait de faire un select du dernier row id lorsque tu INSERT afin de pas te casser le crane
L’idée serait de faire un select du dernier row id lorsque tu INSERT afin de pas te casser le crane
il y a 7 mois
J'ai bien une petite idée sinon :
Récup le dernier id de la table qui m'intéresse
Si l'id est null -> id = "00001"
Sinon je parse la chaine en tant qu'entier puis je l'incrémente de 1 avant de le retransformer en chaine avant l'insertion dans la base de données.
Récup le dernier id de la table qui m'intéresse
Si l'id est null -> id = "00001"
Sinon je parse la chaine en tant qu'entier puis je l'incrémente de 1 avant de le retransformer en chaine avant l'insertion dans la base de données.
il y a 7 mois
PetitChaton
7 mois
J'ai bien une petite idée sinon :
Récup le dernier id de la table qui m'intéresse
Si l'id est null -> id = "00001"
Sinon je parse la chaine en tant qu'entier puis je l'incrémente de 1 avant de le retransformer en chaine avant l'insertion dans la base de données.
Récup le dernier id de la table qui m'intéresse
Si l'id est null -> id = "00001"
Sinon je parse la chaine en tant qu'entier puis je l'incrémente de 1 avant de le retransformer en chaine avant l'insertion dans la base de données.
Tu parses niveau code ou bien dans la requête ?
il y a 7 mois
Non je parle du fait que sqlite a, en plus du champ ID faisant partit du modèle de la table, un champ « système » Row ID qui est géré automatiquement et de façon séquentielle.
L’idée serait de faire un select du dernier row id lorsque tu INSERT afin de pas te casser le crane
L’idée serait de faire un select du dernier row id lorsque tu INSERT afin de pas te casser le crane
Ah, bah je connais pas de fonctionalité équivalente sous MySQL.
Mais je pense pas que ce soit souhaitable non plus, puisque si les profs ont foutu un varchar comme clef primaire, c'est pas pour qu'on contourne le problème.
J'essaye de comprendre leur logique, mais c'est vraiment hors de ma portée pour l'instant.
Ou alors il faudrait saisir les ID manuellement lors de l'Insert mais franchement ça me parraît trop étrange.
(En fait je dois coder un App bureau C# qui fait appel à une API REST pour interroger/mettre à jour la base de données)
Mais je pense pas que ce soit souhaitable non plus, puisque si les profs ont foutu un varchar comme clef primaire, c'est pas pour qu'on contourne le problème.
J'essaye de comprendre leur logique, mais c'est vraiment hors de ma portée pour l'instant.
Ou alors il faudrait saisir les ID manuellement lors de l'Insert mais franchement ça me parraît trop étrange.
(En fait je dois coder un App bureau C# qui fait appel à une API REST pour interroger/mettre à jour la base de données)
il y a 7 mois
Oui, mais dans ce cas comment j'invente l'ID ?
En gros, je vais partir de cet id : "00001"si la table est vide, puis pour le trigger avant insertion, comment je fais pour incrémenter un varchar en pure sql ????
En gros, je vais partir de cet id : "00001"si la table est vide, puis pour le trigger avant insertion, comment je fais pour incrémenter un varchar en pure sql ????
il y a 7 mois
Tu pourrais utiliser un trigger ?
DELIMITER //
CREATE TRIGGER generate_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
END//
DELIMITER ;
DELIMITER //
CREATE TRIGGER generate_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
END//
DELIMITER ;
il y a 7 mois
Mont-Tallac
7 mois
Tu pourrais utiliser un trigger ?
DELIMITER //
CREATE TRIGGER generate_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
END//
DELIMITER ;
DELIMITER //
CREATE TRIGGER generate_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
END//
DELIMITER ;
Oh bordel, ça a l'air très intéressant clef, t'as trouvé ça comment ?
Je garde sous le coude, merci beaucoup clef.
(Je testerai dans l'après midi parce que je vais dormir un peu)
Je garde sous le coude, merci beaucoup clef.
(Je testerai dans l'après midi parce que je vais dormir un peu)
il y a 7 mois
Oh bordel, ça a l'air très intéressant clef, t'as trouvé ça comment ?
Je garde sous le coude, merci beaucoup clef.
(Je testerai dans l'après midi parce que je vais dormir un peu)
Je garde sous le coude, merci beaucoup clef.
(Je testerai dans l'après midi parce que je vais dormir un peu)
Vive llama 3
il y a 7 mois
Mont-Tallac
7 mois
Tu pourrais utiliser un trigger ?
DELIMITER //
CREATE TRIGGER generate_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
END//
DELIMITER ;
DELIMITER //
CREATE TRIGGER generate_id_trigger
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
END//
DELIMITER ;
Ça répond exactement à la question que je me suis posé ici :
https://onche.org/topic/7[...]-merde/2#message_15235272
il y a 7 mois
Ça répond exactement à la question que je me suis posé ici :
https://onche.org/topic/7[...]-merde/2#message_15235272
Truc de ouf à croire que l’AI nous surveille
il y a 7 mois
Ça a l'air prometteur également clef, je garde sous le coude pour cette aprem, merci.
Je connais pas trop ces fonctIons étranges COALESCE donc je vais me renseigner un peu dessus avant.
Et aussi, ce qui me gonfle, c'est que je sais pas si je suis autorisé à gérer ça avec un trigger, parce que c'est spécifié nul part dans l'énoncé.
Par contre, y'a certains passages où ils disent clairement de gérer tel truc avec un trigger..
La je suis perdu, on dirait qu'ils ont pas pensé à quelque chose, c'est pas normal d'être obligé de se prendre autant la tête pour insérer une ligne dans une table..
Je connais pas trop ces fonctIons étranges COALESCE donc je vais me renseigner un peu dessus avant.
Et aussi, ce qui me gonfle, c'est que je sais pas si je suis autorisé à gérer ça avec un trigger, parce que c'est spécifié nul part dans l'énoncé.
Par contre, y'a certains passages où ils disent clairement de gérer tel truc avec un trigger..
La je suis perdu, on dirait qu'ils ont pas pensé à quelque chose, c'est pas normal d'être obligé de se prendre autant la tête pour insérer une ligne dans une table..
il y a 7 mois
Comment générer automatiquement des identifiants uniques séquentiels (00001, 00002, 00003 ... ) sur une table dont la clef primaire est obligatoirement de type Varchar(5) et sans utiliser les fonctions UUID de MySQL.
Rien CONFRUIT
Tu veux une paire de gifles ?
il y a 7 mois
Dans toutes les tables qui ont le même type d'index varchar, on voit qu'ils ont écrit les id en dur dans les insert.
Sauf que là, ça devient ambigü dans le contexte (je dois pouvoir gérer des commandes) donc je vais pas demander à l'utilisateut d'inventer un numéro de commande qu'il doit saisir...
Ça me prend la tête
Sauf que là, ça devient ambigü dans le contexte (je dois pouvoir gérer des commandes) donc je vais pas demander à l'utilisateut d'inventer un numéro de commande qu'il doit saisir...
Ça me prend la tête
il y a 7 mois
PetitChaton
7 mois
Dans toutes les tables qui ont le même type d'index varchar, on voit qu'ils ont écrit les id en dur dans les insert.
Sauf que là, ça devient ambigü dans le contexte (je dois pouvoir gérer des commandes) donc je vais pas demander à l'utilisateut d'inventer un numéro de commande qu'il doit saisir...
Ça me prend la tête
Sauf que là, ça devient ambigü dans le contexte (je dois pouvoir gérer des commandes) donc je vais pas demander à l'utilisateut d'inventer un numéro de commande qu'il doit saisir...
Ça me prend la tête
Au pire tu fais une fonction que tu appelles lors de l’insert ?
DELIMITER //
CREATE FUNCTION generate_id()
RETURNS VARCHAR(5)
BEGIN
DECLARE new_id VARCHAR(5);
SET new_id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
RETURN new_id;
END//
DELIMITER ;
INSERT INTO your_table (id, column1, column2) VALUES (generate_id(), 'value1', 'value2');
DELIMITER //
CREATE FUNCTION generate_id()
RETURNS VARCHAR(5)
BEGIN
DECLARE new_id VARCHAR(5);
SET new_id = LPAD((SELECT IFNULL(MAX(CAST(REPLACE(id, '0', '') AS UNSIGNED)), 0) + 1 FROM your_table), 5, '0');
RETURN new_id;
END//
DELIMITER ;
INSERT INTO your_table (id, column1, column2) VALUES (generate_id(), 'value1', 'value2');
il y a 7 mois