Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un
champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme
clé primaire sur ma table.
Le problème avec uniqid() c'est que les chaines générées sont longues (ex :
6ebad330941e69d1a9b46b59e1d248d0) et font compliquer mon travail en cas
d'incohérence dans la base : une clé de ce type est plus difficile à lire
et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc
refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Lascap
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table. ... Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc
refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Et bien, tu ne peux pas créer une autre table, avec deux champs, un champ "idMax" et un champ "table" , dans lequel tu ferait un SELECT idMax FROM tableAutoincrement WHERE table='tablePourLaquelleTuVeuxUnID' suivi d'un: $res = mysql_fetch_object(mysql_query(la requete)); MonId = $res->idMax + 1;
et d'un update tableAutoIncrement set idMax = $monId where table='tablePourLaquelle.....'
?? je sais, ça fait deux requetes, mais c'est des requetes "light" Si maintenant tu es chez free ou proxad, ou sur tout autre hébergeur ou il ne vaut mieux pas toucher aux bases, fait le avec un fichier.
Lascap
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme
clé primaire sur ma table.
...
Je cherche donc un moyen simple de générer un ID unique et séquentiel
(donc
refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Et bien, tu ne peux pas créer une autre table, avec deux champs, un champ
"idMax" et un champ "table" , dans lequel tu ferait un
SELECT idMax FROM tableAutoincrement WHERE
table='tablePourLaquelleTuVeuxUnID'
suivi d'un:
$res = mysql_fetch_object(mysql_query(la requete));
MonId = $res->idMax + 1;
et d'un update tableAutoIncrement set idMax = $monId where
table='tablePourLaquelle.....'
??
je sais, ça fait deux requetes, mais c'est des requetes "light"
Si maintenant tu es chez free ou proxad, ou sur tout autre hébergeur ou il
ne vaut mieux pas toucher aux bases, fait le avec un fichier.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table. ... Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc
refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Et bien, tu ne peux pas créer une autre table, avec deux champs, un champ "idMax" et un champ "table" , dans lequel tu ferait un SELECT idMax FROM tableAutoincrement WHERE table='tablePourLaquelleTuVeuxUnID' suivi d'un: $res = mysql_fetch_object(mysql_query(la requete)); MonId = $res->idMax + 1;
et d'un update tableAutoIncrement set idMax = $monId where table='tablePourLaquelle.....'
?? je sais, ça fait deux requetes, mais c'est des requetes "light" Si maintenant tu es chez free ou proxad, ou sur tout autre hébergeur ou il ne vaut mieux pas toucher aux bases, fait le avec un fichier.
Lascap
John Gallet
Bonjour,
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un champ autoincrément.
Premier point, qui relève "moultement" plus de fr.comp.lang.sgbd où je te renvoie pour plus de détails : il n'y a que deux cas où les autoincréments sont incontournables :
- s'il n'existe pas de vraie clef primaire fonctionnelle sur la table, et cela peut être le cas en particulier avec des tabels "utilitaires", par exemple une table d'historique mouvement bancaire (rien n'empêche qu'on ait fait deux retraits de la même somme au même gab le même jour sur le même compte). Là je dirasi même qu'on peut se passer de clef primaire sur la table, parce qu'on y accèdera toujours autrement (le numéro de compte).
- si la vraie clef primaire fonctionnelle fait plus de 4 ou 5 colonnes et doit être utilisée come clef étrangère (on va pas se coltiner de reporter tout ça. A trois colonnes, c'est discutable).
NB : ce point de vue fait partie des trolls et autres flame wars habituels genre guerre de religions entre objet ou pas objet. Je constate simplement en pratique qui les autoincrement foutent toujours le bordel. Mais après chacun en fait ce qu'il en veut.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table.
Sous Oracle, il n'existe pas d'autoincrements natifs. On peut les bidouiller, mais ça n'existe pas. Et on s'en passe très bien. MAIS sous Oracle, on a les transactions.
Donc : si tu utilises mysql non innodb, tu es plus ou moins à poil pour gérer les accès concurrentiels. Si tu as innodb (donc les transactions) tu peux disposer d'une table de compteurs (un par table) et tu peux alors simuler un autoincrement à partir de cette table de compteurs depuis ton programme client (PHP en l'occurence).
Le problème avec uniqid() c'est que les chaines générées sont longues (ex : 6ebad330941e69d1a9b46b59e1d248d0) Ca, on s'en tape complètement que la chaîne fasse 32 chars.
et font compliquer mon travail en cas d'incohérence dans la base : une clé de ce type est plus difficile à lire et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Certes. Mais bon, en s'en fiche un peu aussi en termes de programmation. En revanche, RIEN ne te garantit que ton uniqu_id sera effectivement unique dans ta table 6 mois plus tard. C'est uniquement une question de probabilités. Il vaut mieux (? de toutes façons c'est bancal) dans ce cas utiliser un MD5 d'une concaténation de champs qui sont ... la vraie clef primaire de la table !
A moins qu'il y ait un moyen plus simple de résoudre mon problème ? Utiliser une vraie clef primaire fonctionnelle. De toutes façons, il
faudar la mettre en contrainte UNIQUE pour éviter les doublons.
a++ JG
Bonjour,
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un
champ autoincrément.
Premier point, qui relève "moultement" plus de fr.comp.lang.sgbd où je
te renvoie pour plus de détails : il n'y a que deux cas où les
autoincréments sont incontournables :
- s'il n'existe pas de vraie clef primaire fonctionnelle sur la table,
et cela peut être le cas en particulier avec des tabels "utilitaires",
par exemple une table d'historique mouvement bancaire (rien n'empêche
qu'on ait fait deux retraits de la même somme au même gab le même jour
sur le même compte). Là je dirasi même qu'on peut se passer de clef
primaire sur la table, parce qu'on y accèdera toujours autrement (le
numéro de compte).
- si la vraie clef primaire fonctionnelle fait plus de 4 ou 5 colonnes
et doit être utilisée come clef étrangère (on va pas se coltiner de
reporter tout ça. A trois colonnes, c'est discutable).
NB : ce point de vue fait partie des trolls et autres flame wars
habituels genre guerre de religions entre objet ou pas objet. Je
constate simplement en pratique qui les autoincrement foutent toujours
le bordel. Mais après chacun en fait ce qu'il en veut.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme
clé primaire sur ma table.
Sous Oracle, il n'existe pas d'autoincrements natifs. On peut les
bidouiller, mais ça n'existe pas. Et on s'en passe très bien. MAIS sous
Oracle, on a les transactions.
Donc : si tu utilises mysql non innodb, tu es plus ou moins à poil pour
gérer les accès concurrentiels. Si tu as innodb (donc les transactions)
tu peux disposer d'une table de compteurs (un par table) et tu peux
alors simuler un autoincrement à partir de cette table de compteurs
depuis ton programme client (PHP en l'occurence).
Le problème avec uniqid() c'est que les chaines générées sont longues (ex :
6ebad330941e69d1a9b46b59e1d248d0)
Ca, on s'en tape complètement que la chaîne fasse 32 chars.
et font compliquer mon travail en cas
d'incohérence dans la base : une clé de ce type est plus difficile à lire
et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Certes. Mais bon, en s'en fiche un peu aussi en termes de programmation.
En revanche, RIEN ne te garantit que ton uniqu_id sera effectivement
unique dans ta table 6 mois plus tard. C'est uniquement une question de
probabilités. Il vaut mieux (? de toutes façons c'est bancal) dans ce
cas utiliser un MD5 d'une concaténation de champs qui sont ... la vraie
clef primaire de la table !
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Utiliser une vraie clef primaire fonctionnelle. De toutes façons, il
faudar la mettre en contrainte UNIQUE pour éviter les doublons.
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un champ autoincrément.
Premier point, qui relève "moultement" plus de fr.comp.lang.sgbd où je te renvoie pour plus de détails : il n'y a que deux cas où les autoincréments sont incontournables :
- s'il n'existe pas de vraie clef primaire fonctionnelle sur la table, et cela peut être le cas en particulier avec des tabels "utilitaires", par exemple une table d'historique mouvement bancaire (rien n'empêche qu'on ait fait deux retraits de la même somme au même gab le même jour sur le même compte). Là je dirasi même qu'on peut se passer de clef primaire sur la table, parce qu'on y accèdera toujours autrement (le numéro de compte).
- si la vraie clef primaire fonctionnelle fait plus de 4 ou 5 colonnes et doit être utilisée come clef étrangère (on va pas se coltiner de reporter tout ça. A trois colonnes, c'est discutable).
NB : ce point de vue fait partie des trolls et autres flame wars habituels genre guerre de religions entre objet ou pas objet. Je constate simplement en pratique qui les autoincrement foutent toujours le bordel. Mais après chacun en fait ce qu'il en veut.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table.
Sous Oracle, il n'existe pas d'autoincrements natifs. On peut les bidouiller, mais ça n'existe pas. Et on s'en passe très bien. MAIS sous Oracle, on a les transactions.
Donc : si tu utilises mysql non innodb, tu es plus ou moins à poil pour gérer les accès concurrentiels. Si tu as innodb (donc les transactions) tu peux disposer d'une table de compteurs (un par table) et tu peux alors simuler un autoincrement à partir de cette table de compteurs depuis ton programme client (PHP en l'occurence).
Le problème avec uniqid() c'est que les chaines générées sont longues (ex : 6ebad330941e69d1a9b46b59e1d248d0) Ca, on s'en tape complètement que la chaîne fasse 32 chars.
et font compliquer mon travail en cas d'incohérence dans la base : une clé de ce type est plus difficile à lire et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Certes. Mais bon, en s'en fiche un peu aussi en termes de programmation. En revanche, RIEN ne te garantit que ton uniqu_id sera effectivement unique dans ta table 6 mois plus tard. C'est uniquement une question de probabilités. Il vaut mieux (? de toutes façons c'est bancal) dans ce cas utiliser un MD5 d'une concaténation de champs qui sont ... la vraie clef primaire de la table !
A moins qu'il y ait un moyen plus simple de résoudre mon problème ? Utiliser une vraie clef primaire fonctionnelle. De toutes façons, il
faudar la mettre en contrainte UNIQUE pour éviter les doublons.
a++ JG
Shrom
"Zouplaz" a écrit dans le message de news:
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un
champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table.
[SNIP]
Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc
refaire un autoincrément mais sans l'aide d'une base de données)
Un fichier qui contient l'id (INTEGER) que tu incrémentes à chaque fois.
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Si tu exposais en détail le problème, on pourrait peut être t'aider.
Merci
"Zouplaz" <pouet@pouet.com> a écrit dans le message de
news:Xns95245D144430EZoupla@212.27.42.72...
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser
un
champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme
clé primaire sur ma table.
[SNIP]
Je cherche donc un moyen simple de générer un ID unique et séquentiel
(donc
refaire un autoincrément mais sans l'aide d'une base de données)
Un fichier qui contient l'id (INTEGER) que tu incrémentes à chaque fois.
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Si tu exposais en détail le problème, on pourrait peut être t'aider.
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un
champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table.
[SNIP]
Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc
refaire un autoincrément mais sans l'aide d'une base de données)
Un fichier qui contient l'id (INTEGER) que tu incrémentes à chaque fois.
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Si tu exposais en détail le problème, on pourrait peut être t'aider.
Merci
Pimousse
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table.
Le problème avec uniqid() c'est que les chaines générées sont longues (ex : 6ebad330941e69d1a9b46b59e1d248d0) et font compliquer mon travail en cas d'incohérence dans la base : une clé de ce type est plus difficile à lire et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Merci
on peut reprendre le principe d'un champ autoincrement ... en fait, on crée une table qui contient 2 colonnes : - le nom de la table, - l'id (entier) à utiliser pour le prochain enregistrement.
à chaque fois que tu veux enregistrer qqch, tu interroges cette table, récupères l'id correspondant à la bonne table et l'augmentes de 1 ; puis tu utilises la valeur que tu as récupérée pour ton insertion.
j'ai utilisé ça en java en utilisant JDO via une implémentation qui ne connaissait pas la fonction auto_increment de mySQL.
c'est sur, ça rajoute 2 requêtes sql avant chaque insertion, mais ça va super vite.
c'est pas la panacée, mais c'est une solution ....
@++
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un
champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme
clé primaire sur ma table.
Le problème avec uniqid() c'est que les chaines générées sont longues (ex :
6ebad330941e69d1a9b46b59e1d248d0) et font compliquer mon travail en cas
d'incohérence dans la base : une clé de ce type est plus difficile à lire
et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc
refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Merci
on peut reprendre le principe d'un champ autoincrement ...
en fait, on crée une table qui contient 2 colonnes :
- le nom de la table,
- l'id (entier) à utiliser pour le prochain enregistrement.
à chaque fois que tu veux enregistrer qqch, tu interroges cette table,
récupères l'id correspondant à la bonne table et l'augmentes de 1 ; puis
tu utilises la valeur que tu as récupérée pour ton insertion.
j'ai utilisé ça en java en utilisant JDO via une implémentation qui ne
connaissait pas la fonction auto_increment de mySQL.
c'est sur, ça rajoute 2 requêtes sql avant chaque insertion, mais ça va
super vite.
c'est pas la panacée, mais c'est une solution ....
Bonjour, suite à un problème scabreux avec mysql je ne peux pas utiliser un champ autoincrément.
J'ai donc besoin de générer une clée unique avec php pour l'utiliser comme clé primaire sur ma table.
Le problème avec uniqid() c'est que les chaines générées sont longues (ex : 6ebad330941e69d1a9b46b59e1d248d0) et font compliquer mon travail en cas d'incohérence dans la base : une clé de ce type est plus difficile à lire et comparer avec le contenu d'un champ d'une ou plusieurs autres tables.
Je cherche donc un moyen simple de générer un ID unique et séquentiel (donc refaire un autoincrément mais sans l'aide d'une base de données)
A moins qu'il y ait un moyen plus simple de résoudre mon problème ?
Merci
on peut reprendre le principe d'un champ autoincrement ... en fait, on crée une table qui contient 2 colonnes : - le nom de la table, - l'id (entier) à utiliser pour le prochain enregistrement.
à chaque fois que tu veux enregistrer qqch, tu interroges cette table, récupères l'id correspondant à la bonne table et l'augmentes de 1 ; puis tu utilises la valeur que tu as récupérée pour ton insertion.
j'ai utilisé ça en java en utilisant JDO via une implémentation qui ne connaissait pas la fonction auto_increment de mySQL.
c'est sur, ça rajoute 2 requêtes sql avant chaque insertion, mais ça va super vite.
c'est pas la panacée, mais c'est une solution ....
@++
Zouplaz
Pimousse - :
on peut reprendre le principe d'un champ autoincrement ... en fait, on crée une table qui contient 2 colonnes : - le nom de la table, - l'id (entier) à utiliser pour le prochain enregistrement.
à chaque fois que tu veux enregistrer qqch, tu interroges cette table, récupères l'id correspondant à la bonne table et l'augmentes de 1 ; puis tu utilises la valeur que tu as récupérée pour ton insertion.
j'ai utilisé ça en java en utilisant JDO via une implémentation qui ne connaissait pas la fonction auto_increment de mySQL.
c'est sur, ça rajoute 2 requêtes sql avant chaque insertion, mais ça va super vite.
c'est pas la panacée, mais c'est une solution ....
Merci (ainsi qu'aux autres posteurs), j'ai retenu une solution de ce type et ça fonctionne très bien...
Pimousse - vbersinENLEVEZMOITOUTCA@ema.fr :
on peut reprendre le principe d'un champ autoincrement ...
en fait, on crée une table qui contient 2 colonnes :
- le nom de la table,
- l'id (entier) à utiliser pour le prochain enregistrement.
à chaque fois que tu veux enregistrer qqch, tu interroges cette table,
récupères l'id correspondant à la bonne table et l'augmentes de 1 ;
puis tu utilises la valeur que tu as récupérée pour ton insertion.
j'ai utilisé ça en java en utilisant JDO via une implémentation qui ne
connaissait pas la fonction auto_increment de mySQL.
c'est sur, ça rajoute 2 requêtes sql avant chaque insertion, mais ça
va super vite.
c'est pas la panacée, mais c'est une solution ....
Merci (ainsi qu'aux autres posteurs), j'ai retenu une solution de ce type
et ça fonctionne très bien...
on peut reprendre le principe d'un champ autoincrement ... en fait, on crée une table qui contient 2 colonnes : - le nom de la table, - l'id (entier) à utiliser pour le prochain enregistrement.
à chaque fois que tu veux enregistrer qqch, tu interroges cette table, récupères l'id correspondant à la bonne table et l'augmentes de 1 ; puis tu utilises la valeur que tu as récupérée pour ton insertion.
j'ai utilisé ça en java en utilisant JDO via une implémentation qui ne connaissait pas la fonction auto_increment de mySQL.
c'est sur, ça rajoute 2 requêtes sql avant chaque insertion, mais ça va super vite.
c'est pas la panacée, mais c'est une solution ....
Merci (ainsi qu'aux autres posteurs), j'ai retenu une solution de ce type et ça fonctionne très bien...