FAQ
Hola, veran mi duda no se si sea adecuado preguntarlo aqui, pero ya que todos trabajan php+mysql mas de una persona me podra resolver mi duda.

A ver, mi pregunta es... Yo tengo un programa que me genera ordenes de compra, las puedo dejar aprobadas y pendientes, al modificar y ponerlas aprobadas me las convierte en facturas.

La cuestion es, que si me guarda por ejemplo en id_orden_compra en la tabla ordenes_compra

El ID no va siendo numero secuencial, es decir, si creo la primera me sale: 1, al crear otra me sale 4, al crear otra me sale 10, al crear otra me sale 20, y asi sucesivamente.

Y yo necesito, que los id's vayan quedando guardados como: 00001, luego 00002, luego 00003, que lleve el orden secuencial, me explico?.


Se que para los valores en 0000 le pongo que me llene los espacios con ceros, pero para que siga la secuencia sin saltarse un numero, como debo hacer?


Y segundo, si puedo hacer eso, que pasaria si borro una de momento -el plan es no borrarlas, aprobada, pendiente, cancelada no las borra, al borrarla pasa a la base de datos donde esta el campo "borrado"- para no perder la secuencia del ID, o al menos eso he pensado yo, pero, se podria que si borrara por ejemplo la 20, las demas cambiarian el ID? -digo, se podria- porque no se...

La verdad no creo, y si se puede seria un desastre no?, por eso le puse el campo borrado en la base de datos, opara que el ID no se vuelva a usar; porque ya habra una con ese ID. Me explico???


Alguien me podria resolver esta duda explicandome como? y por que si y por que no? ventajas y desventajas.


Exitos,
Carlos Sura.




_________________________________________________________________
http://clk.atdmt.com/UKM/go/195013117/direct/01/
We want to hear all your funny, exciting and crazy Hotmail stories. Tell us now

Search Discussions

  • Ariel Camino at Jul 23, 2010 at 10:40 pm
    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino
  • Ivan Rico at Jul 23, 2010 at 11:14 pm
    Lo que dice Ariel es lo mejor que puedes hacer, y que pasa cuando borras?, pues realmente no sucede nada, solamente deja de existir ese cosecutivo y no se recicla

    Si quieres tener el control total con el borrado y creación de registros has uso de la integridad referencial, es ese tema de las llaves foraneas y esta soportada por el motor InnoDB

    http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-foreign-keys.html

    de hecho yo te diria que usar esto no es una opción sino un requisito para hacer sistemas.

    saludos

    ----- Mensaje original -----
    De: "Ariel Camino" <arielcamino@gmail.com>
    Para: php-es@lists.php.net
    Enviados: Viernes, 23 de Julio 2010 17:39:50 GMT -06:00 Guadalajara / Ciudad de México / Monterrey
    Asunto: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
  • Carlos Sura at Jul 24, 2010 at 12:28 am
    Hola a todos.

    Agradezco mucho sus recomendaciones, la verdad es que si estoy trabajando con la base de datos asi, y el id tiene auto incremento y lleno los espacios vacios con ceros, pero de igual forma, no me los crea en orden.

    Voy a revisar bien lo de integridad referencial y voy a probar de nuevo.

    Exitos,
    Carlos Sura

    -----Original Message-----
    From: Ivan Rico
    Sent: viernes, 23 de julio de 2010 05:14 p.m.
    To: Ariel Camino
    Cc: php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo que dice Ariel es lo mejor que puedes hacer, y que pasa cuando borras?, pues realmente no sucede nada, solamente deja de existir ese cosecutivo y no se recicla

    Si quieres tener el control total con el borrado y creación de registros has uso de la integridad referencial, es ese tema de las llaves foraneas y esta soportada por el motor InnoDB

    http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-foreign-keys.html

    de hecho yo te diria que usar esto no es una opción sino un requisito para hacer sistemas.

    saludos

    ----- Mensaje original -----
    De: "Ariel Camino" <arielcamino@gmail.com>
    Para: php-es@lists.php.net
    Enviados: Viernes, 23 de Julio 2010 17:39:50 GMT -06:00 Guadalajara / Ciudad de México / Monterrey
    Asunto: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
  • Hahmael at Jul 24, 2010 at 12:39 am
    No tienes que llenarlo con ceros, simplemente no haces un llamado al momento
    de hacer el Insert, ademas de que sea Auto_increment que sea un campo NOT
    NULL y buena candidato para que sea la llave Primaria PK..

    supongamos tienes la tabla 'facturas' con los campos:

    id_factura(int)...
    name_customer(char 0)

    el insert podría ser de dos formas..

    1. INSERT INTO facturas (id_factura, name_customer) VALUES (NULL, 'carlos
    pepito')
    2. INSERT INTO facturas (name_customer) VALUES ('carlos pepito')

    Saludo.


    2010/7/23 Carlos Sura <carlos_sura@hotmail.com>
    Hola a todos.

    Agradezco mucho sus recomendaciones, la verdad es que si estoy trabajando
    con la base de datos asi, y el id tiene auto incremento y lleno los espacios
    vacios con ceros, pero de igual forma, no me los crea en orden.

    Voy a revisar bien lo de integridad referencial y voy a probar de nuevo.

    Exitos,
    Carlos Sura

    -----Original Message-----
    From: Ivan Rico
    Sent: viernes, 23 de julio de 2010 05:14 p.m.
    To: Ariel Camino
    Cc: php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo que dice Ariel es lo mejor que puedes hacer, y que pasa cuando borras?,
    pues realmente no sucede nada, solamente deja de existir ese cosecutivo y no
    se recicla

    Si quieres tener el control total con el borrado y creación de registros
    has uso de la integridad referencial, es ese tema de las llaves foraneas y
    esta soportada por el motor InnoDB

    http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-foreign-keys.html

    de hecho yo te diria que usar esto no es una opción sino un requisito para
    hacer sistemas.

    saludos

    ----- Mensaje original -----
    De: "Ariel Camino" <arielcamino@gmail.com>
    Para: php-es@lists.php.net
    Enviados: Viernes, 23 de Julio 2010 17:39:50 GMT -06:00 Guadalajara /
    Ciudad de México / Monterrey
    Asunto: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

    --
    Agradecido.

    Hahmael Tâher.
  • Ricardo Martinez at Jul 24, 2010 at 9:08 am
    Hola a todos!

    Yo creo que el problema lo tiene, en el diseño, tiene una tabla en la que
    va generando "ordenes" y despues esas ordenes se convierten en facturas,
    pero que pasa si esa orden no es generada ¿? o borrada o anulada ¿? pues que
    tiene un hueco un vacio.

    Para ello necesitaria una tabla temporal y otra a nivel de historico con
    las facturas en firme.

    Un saludo!


    2010/7/24 hahmael <hahmael@gmail.com>
    No tienes que llenarlo con ceros, simplemente no haces un llamado al
    momento
    de hacer el Insert, ademas de que sea Auto_increment que sea un campo NOT
    NULL y buena candidato para que sea la llave Primaria PK..

    supongamos tienes la tabla 'facturas' con los campos:

    id_factura(int)...
    name_customer(char 0)

    el insert podría ser de dos formas..

    1. INSERT INTO facturas (id_factura, name_customer) VALUES (NULL, 'carlos
    pepito')
    2. INSERT INTO facturas (name_customer) VALUES ('carlos pepito')

    Saludo.


    2010/7/23 Carlos Sura <carlos_sura@hotmail.com>
    Hola a todos.

    Agradezco mucho sus recomendaciones, la verdad es que si estoy trabajando
    con la base de datos asi, y el id tiene auto incremento y lleno los espacios
    vacios con ceros, pero de igual forma, no me los crea en orden.

    Voy a revisar bien lo de integridad referencial y voy a probar de nuevo.

    Exitos,
    Carlos Sura

    -----Original Message-----
    From: Ivan Rico
    Sent: viernes, 23 de julio de 2010 05:14 p.m.
    To: Ariel Camino
    Cc: php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo que dice Ariel es lo mejor que puedes hacer, y que pasa cuando borras?,
    pues realmente no sucede nada, solamente deja de existir ese cosecutivo y no
    se recicla

    Si quieres tener el control total con el borrado y creación de registros
    has uso de la integridad referencial, es ese tema de las llaves foraneas y
    esta soportada por el motor InnoDB

    http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-foreign-keys.html

    de hecho yo te diria que usar esto no es una opción sino un requisito para
    hacer sistemas.

    saludos

    ----- Mensaje original -----
    De: "Ariel Camino" <arielcamino@gmail.com>
    Para: php-es@lists.php.net
    Enviados: Viernes, 23 de Julio 2010 17:39:50 GMT -06:00 Guadalajara /
    Ciudad de México / Monterrey
    Asunto: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

    --
    Agradecido.

    Hahmael Tâher.


    --
    Ricardo
    _______________________________________________
    IT Architect
    website: http://www.rjmc.es
  • Carlos Sura at Jul 24, 2010 at 2:25 pm
    Hola,
    Efectivamente, yo tengo para las tablas, tablas temporales, por ejemplo:

    ordencompra
    octmp
    facturacp
    factuptmp

    Entonces, asi, si se elimina, tengo un campo llamado "borrado" con CHAR1
    Y asi, si se actualiza o se genera sin quedar el hueco vacio.

    Lo que yo exactamente veia es que, cada vez que genero una nueva me sale: 000080
    cuando genero otra 00033

    Y otra 00055

    Son numeros completamente al azar, todavia no he podido leer los articulos que me pusieron sobre integridad referencial, pero asumo que ese sera el problema.

    Mis tablas estan con MyISAM


    Saludos a todos y gracias por sus respuestas; me han servido de mucho las respuestas.

    Exitos,
    Carlos Sura




    Date: Sat, 24 Jul 2010 10:28:09 +0200
    From: hariseldom@gmail.com
    To: hahmael@gmail.com
    CC: carlos_sura@hotmail.com; ivan@rico.org.mx; php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Hola a todos!

    Yo creo que el problema lo tiene, en el diseño, tiene una tabla en la que
    va generando "ordenes" y despues esas ordenes se convierten en facturas,
    pero que pasa si esa orden no es generada ¿? o borrada o anulada ¿? pues que
    tiene un hueco un vacio.

    Para ello necesitaria una tabla temporal y otra a nivel de historico con
    las facturas en firme.

    Un saludo!


    2010/7/24 hahmael <hahmael@gmail.com>
    No tienes que llenarlo con ceros, simplemente no haces un llamado al
    momento
    de hacer el Insert, ademas de que sea Auto_increment que sea un campo NOT
    NULL y buena candidato para que sea la llave Primaria PK..

    supongamos tienes la tabla 'facturas' con los campos:

    id_factura(int)...
    name_customer(char 0)

    el insert podría ser de dos formas..

    1. INSERT INTO facturas (id_factura, name_customer) VALUES (NULL, 'carlos
    pepito')
    2. INSERT INTO facturas (name_customer) VALUES ('carlos pepito')

    Saludo.


    2010/7/23 Carlos Sura <carlos_sura@hotmail.com>
    Hola a todos.

    Agradezco mucho sus recomendaciones, la verdad es que si estoy trabajando
    con la base de datos asi, y el id tiene auto incremento y lleno los espacios
    vacios con ceros, pero de igual forma, no me los crea en orden.

    Voy a revisar bien lo de integridad referencial y voy a probar de nuevo.

    Exitos,
    Carlos Sura

    -----Original Message-----
    From: Ivan Rico
    Sent: viernes, 23 de julio de 2010 05:14 p.m.
    To: Ariel Camino
    Cc: php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo que dice Ariel es lo mejor que puedes hacer, y que pasa cuando borras?,
    pues realmente no sucede nada, solamente deja de existir ese cosecutivo y no
    se recicla

    Si quieres tener el control total con el borrado y creación de registros
    has uso de la integridad referencial, es ese tema de las llaves foraneas y
    esta soportada por el motor InnoDB

    http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-foreign-keys.html

    de hecho yo te diria que usar esto no es una opción sino un requisito para
    hacer sistemas.

    saludos

    ----- Mensaje original -----
    De: "Ariel Camino" <arielcamino@gmail.com>
    Para: php-es@lists.php.net
    Enviados: Viernes, 23 de Julio 2010 17:39:50 GMT -06:00 Guadalajara /
    Ciudad de México / Monterrey
    Asunto: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

    --
    Agradecido.

    Hahmael Tâher.


    --
    Ricardo
    _______________________________________________
    IT Architect
    website: http://www.rjmc.es
    _________________________________________________________________
    http://clk.atdmt.com/UKM/go/197222280/direct/01/
    We want to hear all your funny, exciting and crazy Hotmail stories. Tell us now
  • Ricardo Martinez at Jul 24, 2010 at 9:44 pm
    hola!

    Con las CLAVES FORANEAS, consigues que no sé te queden datos "colgando" o
    "perdidos" . Porque las referencias entre distintas tablas, van como
    "cosidos" y muchas cosas se tienen que hacer con la programación en php,
    pasan a ser tratadas por mysql.

    El problema que estás describiendo, aún sin usar claves foraneas, no te
    debería de pasar.

    Tal y como te han comentado, si creas las tablas con un id primario (
    primary ) y autoincrement, cada factura nueva en firme que generés, debería
    de ser seguida y correlativa.
    Ten en cuenta que solo puedes tener un campo con la propieda autoincrement
    por cada tabla. Y que ese campo obligatoriamente debe de ser primary.

    Yo no permitiría, eliminar facturas en un principio, ya que las facturas
    siempre tienen que ir correlativas, 1,2,3,4,5,6 y no puede faltar un número,
    si eso pasa puede traer problemas fiscales.

    Cuando soluciones esto, que básicamente es un problema de diseño de la base
    datos, el siguiente problema que vas a tener es la gestión de los décimales,
    con las operaciones ariméticas. Hay funciones en PHP para tratar eso.

    Un saludo y ánimo!!!






    2010/7/24 Carlos Sura <carlos_sura@hotmail.com>

    Hola,
    Efectivamente, yo tengo para las tablas, tablas temporales, por ejemplo:

    ordencompra
    octmp
    facturacp
    factuptmp

    Entonces, asi, si se elimina, tengo un campo llamado "borrado" con CHAR1
    Y asi, si se actualiza o se genera sin quedar el hueco vacio.

    Lo que yo exactamente veia es que, cada vez que genero una nueva me sale:
    000080
    cuando genero otra 00033

    Y otra 00055

    Son numeros completamente al azar, todavia no he podido leer los articulos
    que me pusieron sobre integridad referencial, pero asumo que ese sera el
    problema.

    Mis tablas estan con MyISAM


    Saludos a todos y gracias por sus respuestas; me han servido de mucho las
    respuestas.

    Exitos,
    Carlos Sura




    Date: Sat, 24 Jul 2010 10:28:09 +0200
    From: hariseldom@gmail.com
    To: hahmael@gmail.com
    CC: carlos_sura@hotmail.com; ivan@rico.org.mx; php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Hola a todos!

    Yo creo que el problema lo tiene, en el diseño, tiene una tabla en la que
    va generando "ordenes" y despues esas ordenes se convierten en facturas,
    pero que pasa si esa orden no es generada ¿? o borrada o anulada ¿? pues que
    tiene un hueco un vacio.

    Para ello necesitaria una tabla temporal y otra a nivel de historico con
    las facturas en firme.

    Un saludo!


    2010/7/24 hahmael <hahmael@gmail.com>
    No tienes que llenarlo con ceros, simplemente no haces un llamado al
    momento
    de hacer el Insert, ademas de que sea Auto_increment que sea un campo
    NOT
    NULL y buena candidato para que sea la llave Primaria PK..

    supongamos tienes la tabla 'facturas' con los campos:

    id_factura(int)...
    name_customer(char 0)

    el insert podría ser de dos formas..

    1. INSERT INTO facturas (id_factura, name_customer) VALUES (NULL,
    'carlos
    pepito')
    2. INSERT INTO facturas (name_customer) VALUES ('carlos pepito')

    Saludo.


    2010/7/23 Carlos Sura <carlos_sura@hotmail.com>
    Hola a todos.

    Agradezco mucho sus recomendaciones, la verdad es que si estoy
    trabajando
    con la base de datos asi, y el id tiene auto incremento y lleno los espacios
    vacios con ceros, pero de igual forma, no me los crea en orden.

    Voy a revisar bien lo de integridad referencial y voy a probar de
    nuevo.
    Exitos,
    Carlos Sura

    -----Original Message-----
    From: Ivan Rico
    Sent: viernes, 23 de julio de 2010 05:14 p.m.
    To: Ariel Camino
    Cc: php-es@lists.php.net
    Subject: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo que dice Ariel es lo mejor que puedes hacer, y que pasa cuando borras?,
    pues realmente no sucede nada, solamente deja de existir ese
    cosecutivo y
    no
    se recicla

    Si quieres tener el control total con el borrado y creación de
    registros
    has uso de la integridad referencial, es ese tema de las llaves
    foraneas
    y
    esta soportada por el motor InnoDB

    http://dev.mysql.com/doc/refman/5.0/es/ansi-diff-foreign-keys.html

    de hecho yo te diria que usar esto no es una opción sino un requisito para
    hacer sistemas.

    saludos

    ----- Mensaje original -----
    De: "Ariel Camino" <arielcamino@gmail.com>
    Para: php-es@lists.php.net
    Enviados: Viernes, 23 de Julio 2010 17:39:50 GMT -06:00 Guadalajara /
    Ciudad de México / Monterrey
    Asunto: Re: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL

    Lo mejor es que en la estructura de la tabla utilices un campo con la
    propiedad AUTO_INCREMENT, y le delegues el problema a Mysql:
    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    Saludos,
    --
    Ariel Camino

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

    --
    Agradecido.

    Hahmael Tâher.


    --
    Ricardo
    _______________________________________________
    IT Architect
    website: http://www.rjmc.es
    _________________________________________________________________
    http://clk.atdmt.com/UKM/go/197222280/direct/01/
    We want to hear all your funny, exciting and crazy Hotmail stories. Tell us
    now


    --
    Ricardo
    _______________________________________________
    IT Architect
    website: http://www.rjmc.es
  • Juan Pablo Berdejo at Jul 24, 2010 at 10:50 pm
    Hola,

    Se debe tener en cuenta que cuando en una tabla permanentemente se están
    borrando registros y escribiendo nuevos, los nuevos registros pueden quedar
    físicamente en los espacios dejados por los borrados, de tal forma que si se
    hace un SELECT sin ningún orden explícito, la tabla puede parecer
    "desordenada". Para evitar esto, hay varias opciones:

    1. Utilizar siempre ORDER BY cuando se haga un SELECT.
    2. Reordenar la tabla con ALTER TABLE `nombre_tabla` ORDER BY `campo_id`
    3. Optimizar la tabla con OPTIMIZE TABLE `nombre_tabla`



    2010/7/24 Carlos Sura <carlos_sura@hotmail.com>

    Hola,
    Efectivamente, yo tengo para las tablas, tablas temporales, por ejemplo:

    ordencompra
    octmp
    facturacp
    factuptmp

    Entonces, asi, si se elimina, tengo un campo llamado "borrado" con CHAR1
    Y asi, si se actualiza o se genera sin quedar el hueco vacio.

    Lo que yo exactamente veia es que, cada vez que genero una nueva me sale:
    000080
    cuando genero otra 00033

    Y otra 00055

    Son numeros completamente al azar, todavia no he podido leer los articulos
    que me pusieron sobre integridad referencial, pero asumo que ese sera el
    problema.

    Mis tablas estan con MyISAM


    Saludos a todos y gracias por sus respuestas; me han servido de mucho las
    respuestas.

    Exitos,
    Carlos Sura


    --
    Salu2,

    Juan Pablo Berdejo Casas, M.D.
    GNU/Linux Registred User #131315
    http://es.openoffice.org
    http://www.getfirefox.com
    http://www.obtengalinux.org

    "No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella"
  • Carlos at Jul 23, 2010 at 11:14 pm
    Hola, pues si, un campo autoincrementado te irá aumentando cada nuevo id en
    1.

    Además puedes definir el campo con unsigned zerofill, para rellenar los 0 a
    la izquierda,

    CREATE TABLE `nombre_tabla` (
    `id` INT( 5 ) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY
    ) ENGINE = MYISAM ;


    De esta forma cada nuevo registro tomará los id:

    00001
    00002
    00003

    En caso de eliminar un registro, el resto de ids no cambian, por ejemplo si
    quitas el segundo registro y luego añades otr nuevo, te quedaría esto:

    00001
    00003
    00004

    Saludos
    Carlos

    ----- Original Message -----
    From: "Carlos Sura" <carlos_sura@hotmail.com>
    To: <php-es@lists.php.net>
    Sent: Saturday, July 24, 2010 12:34 AM
    Subject: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL




    Hola, veran mi duda no se si sea adecuado preguntarlo aqui, pero ya que
    todos trabajan php+mysql mas de una persona me podra resolver mi duda.

    A ver, mi pregunta es... Yo tengo un programa que me genera ordenes de
    compra, las puedo dejar aprobadas y pendientes, al modificar y ponerlas
    aprobadas me las convierte en facturas.

    La cuestion es, que si me guarda por ejemplo en id_orden_compra en la tabla
    ordenes_compra

    El ID no va siendo numero secuencial, es decir, si creo la primera me sale:
    1, al crear otra me sale 4, al crear otra me sale 10, al crear otra me sale
    20, y asi sucesivamente.

    Y yo necesito, que los id's vayan quedando guardados como: 00001, luego
    00002, luego 00003, que lleve el orden secuencial, me explico?.


    Se que para los valores en 0000 le pongo que me llene los espacios con
    ceros, pero para que siga la secuencia sin saltarse un numero, como debo
    hacer?


    Y segundo, si puedo hacer eso, que pasaria si borro una de momento -el plan
    es no borrarlas, aprobada, pendiente, cancelada no las borra, al borrarla
    pasa a la base de datos donde esta el campo "borrado"- para no perder la
    secuencia del ID, o al menos eso he pensado yo, pero, se podria que si
    borrara por ejemplo la 20, las demas cambiarian el ID? -digo, se podria-
    porque no se...

    La verdad no creo, y si se puede seria un desastre no?, por eso le puse el
    campo borrado en la base de datos, opara que el ID no se vuelva a usar;
    porque ya habra una con ese ID. Me explico???


    Alguien me podria resolver esta duda explicandome como? y por que si y por
    que no? ventajas y desventajas.


    Exitos,
    Carlos Sura.




    _________________________________________________________________
    http://clk.atdmt.com/UKM/go/195013117/direct/01/
    We want to hear all your funny, exciting and crazy Hotmail stories. Tell us
    now


    --------------------------------------------------------------------------------



    No virus found in this incoming message.
    Checked by AVG - www.avg.com
    Version: 8.5.441 / Virus Database: 271.1.1/3023 - Release Date: 07/23/10
    06:36:00
  • Hahmael at Jul 24, 2010 at 12:27 am
    Agregando a lo que los compañeros te han dicho, yo en tu caso no borraría el
    campo, solo agregaría un campo mas a la tabla con el nombre "status" de tipo
    boolean Cero(anulada) , uno (aprobada) o un CHAR(1) y manejaría los estados
    que me interesen 1 impresa, 0 anula, 2 en espera, 3 .... por poner un
    ejemplo.

    El resto seguir las recomendaciones que han escrito el resto de amigos, que
    seria un campo ID autoincrement...etc, teniendo en que cuando elimines uno
    no pasa nada, de hecho queda el vació a menos que reorganizes o resetees el
    auto_increment de la tabla o también creo se 'auto resetea' cuando se
    reinicia el servidor mysql o haciendo intencionalmente algo como esto 'alter
    table 'tu_tabla' auto_increment=20' (empezaría desde aquí).

    Saludo y mucha suerte en tu trabajo.

    2010/7/23 Carlos <carlos@exea.net>
    Hola, pues si, un campo autoincrementado te irá aumentando cada nuevo id en
    1.

    Además puedes definir el campo con unsigned zerofill, para rellenar los 0 a
    la izquierda,

    CREATE TABLE `nombre_tabla` (
    `id` INT( 5 ) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY
    ) ENGINE = MYISAM ;


    De esta forma cada nuevo registro tomará los id:

    00001
    00002
    00003

    En caso de eliminar un registro, el resto de ids no cambian, por ejemplo si
    quitas el segundo registro y luego añades otr nuevo, te quedaría esto:

    00001
    00003
    00004

    Saludos
    Carlos

    ----- Original Message ----- From: "Carlos Sura" <carlos_sura@hotmail.com>
    To: <php-es@lists.php.net>
    Sent: Saturday, July 24, 2010 12:34 AM
    Subject: [PHP-ES] Hola amigos, tengo una duda con PHP + MYSQL





    Hola, veran mi duda no se si sea adecuado preguntarlo aqui, pero ya que
    todos trabajan php+mysql mas de una persona me podra resolver mi duda.

    A ver, mi pregunta es... Yo tengo un programa que me genera ordenes de
    compra, las puedo dejar aprobadas y pendientes, al modificar y ponerlas
    aprobadas me las convierte en facturas.

    La cuestion es, que si me guarda por ejemplo en id_orden_compra en la tabla
    ordenes_compra

    El ID no va siendo numero secuencial, es decir, si creo la primera me sale:
    1, al crear otra me sale 4, al crear otra me sale 10, al crear otra me sale
    20, y asi sucesivamente.

    Y yo necesito, que los id's vayan quedando guardados como: 00001, luego
    00002, luego 00003, que lleve el orden secuencial, me explico?.


    Se que para los valores en 0000 le pongo que me llene los espacios con
    ceros, pero para que siga la secuencia sin saltarse un numero, como debo
    hacer?


    Y segundo, si puedo hacer eso, que pasaria si borro una de momento -el plan
    es no borrarlas, aprobada, pendiente, cancelada no las borra, al borrarla
    pasa a la base de datos donde esta el campo "borrado"- para no perder la
    secuencia del ID, o al menos eso he pensado yo, pero, se podria que si
    borrara por ejemplo la 20, las demas cambiarian el ID? -digo, se podria-
    porque no se...

    La verdad no creo, y si se puede seria un desastre no?, por eso le puse el
    campo borrado en la base de datos, opara que el ID no se vuelva a usar;
    porque ya habra una con ese ID. Me explico???


    Alguien me podria resolver esta duda explicandome como? y por que si y por
    que no? ventajas y desventajas.


    Exitos,
    Carlos Sura.




    _________________________________________________________________
    http://clk.atdmt.com/UKM/go/195013117/direct/01/
    We want to hear all your funny, exciting and crazy Hotmail stories. Tell us
    now



    --------------------------------------------------------------------------------



    No virus found in this incoming message.
    Checked by AVG - www.avg.com
    Version: 8.5.441 / Virus Database: 271.1.1/3023 - Release Date: 07/23/10
    06:36:00



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

    --
    Agradecido.

    Hahmael Tâher.
  • Carlos Medina at Jul 26, 2010 at 11:14 am

    Am 24.07.2010 00:34, schrieb Carlos Sura:
    El ID no va siendo numero secuencial, es decir, si creo la primera me sale: 1, al crear otra me sale 4, al crear otra me sale 10, al crear otra me sale 20, y asi sucesivamente.
    Hola Carlos,
    tengo 10 anos haciendo shops y sistemas de facturacion. Te cuento que el
    lio que yo hago es mucho mas grande pero que al final me resulta mucho
    mas comodo porque en cuestion de facturacion los clientes son muy
    meticulosos. Te doy las recomendaciones que siguen a razon de como te
    dije he tenido la experiencia de que funciona. No tiene por que ser tu
    caso pero de repente te ayuda en algo.

    1.- Los id de autoincrement por lo general es un inice que puedes usar
    para las relaciones de tabla pero que no van muy bien cuando necesitas
    enumerar facturas, comenzando porque los numeros de facturas pueden
    tener diferentes formatos. Si deseas hacer tus numeros de facturacion
    con un auto_increment, puedes hacerlo pero te va a causar problemas
    cuando borres un data (no encontraras mas la factura). En algunos paises
    es requisito que las facturas sean guardadas por un periodo largo (por
    cuestiones fiscales). Asi que la solucion que le he encontrado es una
    tabla que no hace otra cosa que marcar un indice autoincrement. Se le
    pregunta a esta tabla primero *antes* de hacer el insert a una tabla de
    facturacion. Es decir siempre tendras un numero nuevo cada vez que
    preguntes a esta tabla. En esta tabla grabaras el numero de factura
    anadido por ejemplo:

    id (autoincrement), order (numero de factura)

    2.- Al inserar una factura nueva debes "sacar" un numero nuevo de la
    tabla de ayuda y guardarlo todo. Para hacer el numero de factura debes
    usar el numero de la tabla de ayuda.
    3.- Puedes marcar las facturas con un flag de borrado para no tener que
    borrarlas fisicamente. Si deseas en un futuro borrarlas de verdad
    (tenemos un sistema de archivo que guarda la informacion en forma de
    xml) puedes usar nuevamente la tabla de ayuda para organizarlas. Si
    borras completamente la entrada en la tabla de facturas y reorganizas la
    tabla, los numeros en la tabla de ayuda seguiran dandote numeros
    secuenciales y no pierdes la secuencia.

    Es algo que hacemos desde hace anos y nos ha dado buenos resultados. A
    ver si te ayuda

    Saludos

    Carlos Medina
  • Carlos Sura at Jul 26, 2010 at 4:41 pm
    Hola Carlos Medina,

    Tu respuesta es muy explicativa, me has dado buenas ideas para mejorar el sistema. Si, ya tenia un flag de borrado, para que quede guardado, simplemente desaparece de la vista, pero queda como registro.

    Voy a probar creando la tabla como dices, y te voy a comentar si me ha dado resultado, de otra forma tambien te comentare como le hice.

    Una duda mas. Cita:"Si deseas en un futuro borrarlas de verdad (tenemos un sistema de archivo que guarda la informacion en forma de xml) puedes usar nuevamente la tabla de ayuda para organizarlas. Si borras completamente la entrada en la tabla de facturas y reorganizas la tabla, los numeros en la tabla de ayuda seguiran dandote numeros secuenciales y no pierdes la secuencia"

    Podrias explicarme un poco mas de tu sistema de archivo que guarda en XML?
    Me interesa tambien poder hacer algo muy similar.


    Exitos,
    Carlos Sura.





    To: php-es@lists.php.net
    Date: Mon, 26 Jul 2010 13:14:16 +0200
    From: info@simply-networks.de
    Subject: [PHP-ES] Re: Hola amigos, tengo una duda con PHP + MYSQL

    Am 24.07.2010 00:34, schrieb Carlos Sura:
    El ID no va siendo numero secuencial, es decir, si creo la primera me sale: 1, al crear otra me sale 4, al crear otra me sale 10, al crear otra me sale 20, y asi sucesivamente.
    Hola Carlos,
    tengo 10 anos haciendo shops y sistemas de facturacion. Te cuento que el
    lio que yo hago es mucho mas grande pero que al final me resulta mucho
    mas comodo porque en cuestion de facturacion los clientes son muy
    meticulosos. Te doy las recomendaciones que siguen a razon de como te
    dije he tenido la experiencia de que funciona. No tiene por que ser tu
    caso pero de repente te ayuda en algo.

    1.- Los id de autoincrement por lo general es un inice que puedes usar
    para las relaciones de tabla pero que no van muy bien cuando necesitas
    enumerar facturas, comenzando porque los numeros de facturas pueden
    tener diferentes formatos. Si deseas hacer tus numeros de facturacion
    con un auto_increment, puedes hacerlo pero te va a causar problemas
    cuando borres un data (no encontraras mas la factura). En algunos paises
    es requisito que las facturas sean guardadas por un periodo largo (por
    cuestiones fiscales). Asi que la solucion que le he encontrado es una
    tabla que no hace otra cosa que marcar un indice autoincrement. Se le
    pregunta a esta tabla primero *antes* de hacer el insert a una tabla de
    facturacion. Es decir siempre tendras un numero nuevo cada vez que
    preguntes a esta tabla. En esta tabla grabaras el numero de factura
    anadido por ejemplo:

    id (autoincrement), order (numero de factura)

    2.- Al inserar una factura nueva debes "sacar" un numero nuevo de la
    tabla de ayuda y guardarlo todo. Para hacer el numero de factura debes
    usar el numero de la tabla de ayuda.
    3.- Puedes marcar las facturas con un flag de borrado para no tener que
    borrarlas fisicamente. Si deseas en un futuro borrarlas de verdad
    (tenemos un sistema de archivo que guarda la informacion en forma de
    xml) puedes usar nuevamente la tabla de ayuda para organizarlas. Si
    borras completamente la entrada en la tabla de facturas y reorganizas la
    tabla, los numeros en la tabla de ayuda seguiran dandote numeros
    secuenciales y no pierdes la secuencia.

    Es algo que hacemos desde hace anos y nos ha dado buenos resultados. A
    ver si te ayuda

    Saludos

    Carlos Medina

    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php
    _________________________________________________________________
    http://clk.atdmt.com/UKM/go/195013117/direct/01/
    We want to hear all your funny, exciting and crazy Hotmail stories. Tell us now

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedJul 23, '10 at 10:34p
activeJul 26, '10 at 4:41p
posts13
users8
websitephp.net

People

Translate

site design / logo © 2022 Grokbase