Foros del Web » Programando para Internet » PHP »

Mostrar el índice de un campo ENUM de MySQL

Estas en el tema de Mostrar el índice de un campo ENUM de MySQL en el foro de PHP en Foros del Web. Tengo en una Base de Datos MySQL un campo ENUM con diferentes cadenas. Código: CREATE TABLE `mi_tabla` ( . . . `procesador` ENUM( 'Intel® Celeron', ...
  #1 (permalink)  
Antiguo 29/12/2004, 19:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 5
Antigüedad: 19 años, 3 meses
Puntos: 0
Mostrar el índice de un campo ENUM de MySQL

Tengo en una Base de Datos MySQL un campo ENUM con diferentes cadenas.

Código:
CREATE TABLE `mi_tabla` (
   .
   .
   .

`procesador` ENUM( 'Intel® Celeron', 'Intel® Pentium 4', 'Intel® Pentium 4 HT', 'AMD Athlon XP', 'AMD Sempron', 'AMD Athlon 64' ) ,
   .
   .
   .

)
Por otra parte en una página PHP necesito desplegar el índice de este campo.
Soy nuevo en esto y no estoy seguro de conocer por completo las alternativas que hay, por el momento estoy usando algo como esto:

Código PHP:
while($row mysql_fetch_array($result)) {    
        
printf("%s"$row["proc"]);
    } 
Repito para que no haya duda. lo que esto me despliega es el texto que metí al crear la tabla, lo que yo necesito es su número de índice, si alguien me pudiera decir qué hacer estaría muy agradecido
  #2 (permalink)  
Antiguo 29/12/2004, 19:42
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 19 años, 11 meses
Puntos: 0
Cuando insertas en la tabla mi_tabla valores, este mysql_insert_id() te regresa el indice de valor del campo insertado, te recomiento que crees un campo adicional autonumérico. Pero si te referis a un identificador de los valores posibles al campo procesador, es mejor que los valores definidos como 'Intel Celeron' los manejes en el formulario a través de un combo y el valor de dicha variable sea numérica y al insertarlos únicamente almacenes sus números, así al consultarlos nuevamente, sabras con anticipación de sus valores.
__________________
Julio Hernández
  #3 (permalink)  
Antiguo 30/12/2004, 05:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Puedes usar la función mysql_fethc_field()
http://www.php.net/mysql_fetch_field

Un ejemplo completo:

Cita:
kflam at awc dot net dot au
19-Jun-2002 06:56
#Input: the table name and the enum field
#Output: an array that stores all options of the enum field or
#false if the input field is not an enum
Código PHP:
function getEnumOptions($table$field) {
   
$finalResult = array();

   if (
strlen(trim($table)) < 1) return false;
   
$query  "show columns from $table";
   
$result mysql_query($query);
   while (
$row mysql_fetch_array($result)){
       if (
$field != $row["Field"]) continue;
       
//check if enum type
       
if (ereg('enum.(.*).'$row['Type'], $match)) {
           
$opts explode(','$match[1]);
           foreach (
$opts as $item)
               
$finalResult[] = substr($item1strlen($item)-2);
       }
       else
               return 
false;
   }
   return 
$finalResult;

The function could be handy when making a selection option without typing all the options items respectively.
*Extraido de los comentarios de los usuarios de dicha función del manual oficial de PHP.

Su uso:

Código PHP:
$array_opciones=getEnumOptions('tabla_nombre''nombre_campo_emum');
foreach (
$array_opciones as $opcion){
    echo 
$opcion."<br>";

Un saludo,

Última edición por Cluster; 30/12/2004 a las 05:31
  #4 (permalink)  
Antiguo 30/12/2004, 05:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ops! .. parece que no es eso lo que necesitas ahora que re-leeo tu pregunta .. pero ya que lo hice ahí queda .. de todas formas es interesante .. de hecho al generar tus posibles opciones así .. y ser un array lo que obtienes podrías hacer:

Código PHP:
$array_opciones=getEnumOptions('tabla_nombre''nombre_campo_emum'); 
foreach (
$array_opciones as $indice=>$opcion){ 
    echo 
$indice."=>".$opcion."<br>"

Si te fijas . .el indice es 0,1,2,3 .. N pero .. en un campo ENUM no hay más indice .. son sólo valores lo que guardas y las posibles opciones. En su defecto usa una tabla extra "normalizada" como te comenta jchernandez en relación 1-N tipo:

tabla procesadores
id_procesador
nombre

tabla equipos
id_equipo
id_procesador <--- clave foránea
otra_propiedad
otra_mas_propiedad

Normalizar así tu BD mejor las consultas SQL que puedas hacer en muchos casos. En otros no .. todo depende de que hagas con ese dato .. si piensas filtrar por ese campo, ordenar .. hacer grupos .. etc.

Un saludo,
  #5 (permalink)  
Antiguo 30/12/2004, 17:39
 
Fecha de Ingreso: diciembre-2004
Mensajes: 5
Antigüedad: 19 años, 3 meses
Puntos: 0
Pues muchas gracias por su ayuda. El problema lo resolví cambiando el campo por uno numérico ya asignándole su valor correspondiente en programación cuando era necesario.

Me suscribí a este foro para resolver esa duda y he quedado muy contento con las respuestas así que creo que por aquí nos seguiremos viendo
  #6 (permalink)  
Antiguo 30/12/2004, 18:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Bueno.. en lugar de ese campo "enum" yo trasladaría los detalles a otra tabla para tener más control de ellos. Además hay un poco más de flexibilidad. Si seguimos rígidamente la normalización, podrían salir algunas tablas más. Por ejemplo:

Una tabla "procesador" con campos
idProcesador (PK)
idFabricante (FK)
modelo

Y otra tabla "Fabricante"
idFabricante (PK)
nombre
descripcion

Y claro, en tu tabla "mi_tabla" sólo insertas el idProcesador.

Esto puede ser conveniente o no según el tipo de uso que le vas a dar a tu base de datos... Yo en tu caso sólo me quedaría con la tabla "procesador" (aunque, como dije, todo depende del uso)

saludos
  #7 (permalink)  
Antiguo 23/08/2011, 12:49
 
Fecha de Ingreso: junio-2009
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Mostrar el índice de un campo ENUM de MySQL

esta genial este codigo, pero si se emplea con ez_sql hay que hacer modificaciones ya que por ejemplo el mysql_fetch_array() ya no se emplea.

otra cosa, una vez obtenidos los valores que almacena el campo de tipo enum, estos pueden ser llamados o mostrados en el formulario de la siguiente forma:

Código PHP:
<select name="form[Tipoatencion]" id="Tipoatencion">
        <option value="">Seleccione una opción</option>
    <?php
    
foreach ($array_opciones as $opcion)
    {
?>
        <option value="<?echo $opcion;?>"><?=$opcion;?></option>
<?    }?>
</select>
lo que nos permite almacenar los datos sin errores =). tambien permite hacer cambios en los mismos a nivel de base de datos y no perjudia el funcionamiento de nuestro formulario
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 12:59.