Foros del Web » Programando para Internet » PHP »

Recuperar datos de un Enum

Estas en el tema de Recuperar datos de un Enum en el foro de PHP en Foros del Web. Mi pregunta es la siguiente: Como puedo recuperar los valores de un campo de tipo enum('Madrid','Barcelona','Valencia') Como puedo recuperarlos para poder pintarlos en pantalla y ...
  #1 (permalink)  
Antiguo 13/12/2002, 07:40
 
Fecha de Ingreso: diciembre-2002
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Recuperar datos de un Enum

Mi pregunta es la siguiente:


Como puedo recuperar los valores de un campo de tipo enum('Madrid','Barcelona','Valencia')

Como puedo recuperarlos para poder pintarlos en pantalla y que aparezca Madrid,Barcelona,Valencia

He probado con :
SHOW COLUMNS FROM usuarios LIKE 'ciudad'

Pero lo que recibo no es exaztamente lo que quiero porque los valores que me da son los valores de ese campo de MYSQL me da ciudad y luego enum('Madrid','Barcelona','Valencia')


Espero alguna respuesta es un poco urgente
  #2 (permalink)  
Antiguo 13/12/2002, 19:50
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 16 años, 2 meses
Puntos: 6
Creo que estas haciendo mal uso del campo ENUM:
ENUM(valor,valor1....);
Es un objeto string que puede tomar solo un valor de la lista separada por comas, el valor NULL o el "".
Lo que tu estas intentando es usarlo com si fuera un arreglo, pero no lo es a un cuando internamente cada valor agregado este referenciado por un valor numerico que es el INDEX del campo NUM.
El funcionamiento lo podemos ver de la siguiente forma, supongamos una tabla llamada usuario como la tuya que tenga los campos id,nombre,ciudad donde ciudad sera un campo ENUM. que contiene los valores Madrid, Barcelona,Valencia.

create table usuario(
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
u_nombre VARCHAR(100),
u_ciudad ENUM('Madrid','Barcelona','Valencia'),
PRIMARY KEY (id)
);


Supongamos que quiero agregar un usuario, que se llame juanito y que sea de la ciudad de Barcelona lo haria de la siguiente forma.

INSERT INTO usuario(u_nombre,u_ciudad) VALUES('Juanito',2);

Si a hora hago una consulta buscando a juantio:
SELECT * FROM usuario WHERE u_nombre = 'Juanito';
obtendria como respuesta los valores 1,Juanito,Barcelona.

Esto es debido que dentro del objeto ENUM creado, la informacion esta almacenada de la siguiente forma.
valor index
NULL NULL
"" 0
Madrid 1
Barcelona 2
Valencia 3
  #3 (permalink)  
Antiguo 14/12/2002, 23:16
Avatar de BVis  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 104
Antigüedad: 15 años
Puntos: 0
Supongo que esto es lo que estás buscando:

Código PHP:
$sql "show columns from TABLA like 'NOMBRE_COLUMNA_ENUM'";

$resultado mysql_query($sql); 
$fila mysql_fetch_array($resultado);
$cadenavalor $fila[1];
$cadenavalor ereg_replace("enum"""$cadenavalor);
$cadenavalor ereg_replace("\("""$cadenavalor);
$cadenavalor ereg_replace("\)"""$cadenavalor);
$cadenavalor ereg_replace("\'"""$cadenavalor);
$valores split(","$cadenavalor); 
Es decir, en $valores, tendrás cada uno de los valores válidos del campo tipo ENUM.

1 Saludo
  #4 (permalink)  
Antiguo 16/12/2002, 05:41
 
Fecha de Ingreso: diciembre-2002
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Estimado Herminio Heredia San

Por lo que me conmentas en tu mensaje me parece que me estoy equivocando al hacer una columna como enum para que tubiese varios valores de ciudad y asi no tener que tener otra tabla adicional donde contener las ciudades.

Hay alguna forma de conseguirlo o es mejor que el fina genere una tabla adicional para las ciudades....

MUXAS GRACIAS
  #5 (permalink)  
Antiguo 16/12/2002, 07:41
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 16 años, 2 meses
Puntos: 6
Hola Enriquillo, bueno eso depende de lo que necesites hacer, pero de que hay maneras, las hay una de ellas es precisamente la solucion que te propone BVis. Pero al menos en mi humilde opinion debieras tener una tabla para contene la informacion de las ciudades, y tambien usar el campo ENUM, que la ventaja de su uso es que puede ahorrarte una consulta.
Como en el caso de que uses una lista desplegable que contenga las ciudades disponibles. Generalmente en este caso solamente pasas el id de la ciudad para ser insertado aqui es donde entra el campo ENUM , el cual recive el ID, que realmente es una referencia al contenido en esa posicion.
de tal forma que puedes tener una tabla que contenga las ciudades y al hacer una consulta no te preocupas por hacer refencia a esa tabla ya que ha la hora de recuperar la consulta obtienes el valor y no el Id que estaba almacenado en esa posicion.
Pero como todo esta solo es una idea, ya tu decidiras que es lo mas apropiado para tu proyecto.
  #6 (permalink)  
Antiguo 16/12/2002, 08:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Como bien dice Herminio ... cada proyecto requiere de tu técnica .. o bien un campo ENUM o una tabla extra para tener esos datos que usaras sus Id's correspondientes para establecer una integridad referencial entre ambos.

Personalmente, si son pocos datos y fijos (al menos que no varien contantemente salvo algun tipo de "upgrade" o actualización muyyy de vez en cuando) .. mantengo esos datos en un campo ENUM.

Si son esos datos susecptibles a ser modificados a menudo .. prefiero usar una tabla extra y gestionar las claves foraneas (keys) ...

A veces .. normalizar al extremo implica mucho tiempo de proceso (varias consultas) para procesar una peticion a tu base de datos ya que tienes que ir recorriendo todas las tablas implicadas para obtener un resultado "legible" (es decir .. para representar esos "Id's" que guardas en tus tablas "padre" de las "hijas").

La ventaja que tiene "normalizar" es que la información se hace lo menos redundante posible .. optimizando el tamaño de tu base de datos .. pero no así la velocidad de acceso.

En un campo ENUM tenemos la rapidez de que "ahi mismo" en la misma tabla tenemos el campo "legible" listo para ser presentado con la técnica que propuso BVis ..

Estos Campos ENUM se pueden optimizar un pco .. para tener una base de datos un poco mas ligera (de peso - tamaño) .. se trata de tener en un array (PHP) los valores (usuarlmente string - cadenas) que tengan ese ENUM ... pero en el campo ENUM guardar solo Identificativos Numericos que serán los que usemos como indices en nuestro Array PHP para representar su valor "legible" ..

Esto aligeraría la base de datos .. pero en cada consulta le sumamos el proceso de gestinar el array por parte de PHP .. ademas de que si acccedemos a esta base de datos con otro software escrito en otro lenguaje .. este a su vez deberá implementar la lógica del Array ...
Un ejemplo seria a la hora de usar un administrador de Mysql tipo phpMyadmin .. este tiene la virtud de generar una lista desplegable con las opciones de un campo ENUM a la hora de crear/modificar un registro sobre el propio administrado directo en Mysql ... ahí, en este caso, solo veriamos nuestros indices numericos .. y seriamos nosotros (administrador o quien gestione esa base de datos) el que tenga que tener en un "papel" u otro medio las correspondecias ENUM numerio con --> valor a presentar.

Yo he usado este último método en una aplicación .. pero lo hice porque sabía que del entorno PHP+Mysql e incluso mi propia apliación no va a salirse .. Pero si algun dia por A o B motivo se ha de atacar esa Base de datos desde otra aplicación .. tendrán q "apañarselas" con mi "optimizacion de peso de la base de datos" .. En tal caso .. al guardar identificadores numéricos .. no seria nada dificil ni "drastico" implemtar una tabla extra (para la base de datos .. q seria una replica del array q ya usaba) y establecer las claves foraneas (keys). en las consultas que correspondan ...

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:24.