<? 
# esta es la variable que recoge el nombre de la base de datos

$base="rinconastur";

# esta otra recoge el nombre de la tabla origen de los datos

$tabla="demo1";

# esta otra recoge el nombre de la NUEVA TABLA

$nueva="demo2";

# establecemos la conexión con el servidor

$conexion=mysql_connect ("localhost","root","pepe");

# seleccionamos la base de datos

mysql_select_db ($base$conexion);

# extraemos al IDENTIFICADOR DE RESULTADO 
# el resultado de la sentencia MySQL SHOW FIELDS
# que recoge la información sobre la estructura del fichero

$resultado=mysql_query"SHOW FIELDS from $tabla",$conexion);

# Igual que en el ejemplo anterior
# insertamos un bucle que lea las filas de IDENTIFICADOR DE RESULTADO
# hasta encontrar el valor FALSE que indicará que se agotaron las filas
# y escribimos mediante el FOREACH los valores del array que va
# devolviendo mysql_fetch_array, aunque como esta función devuelve los
# resultados duplicados (mediante un array escalar y otro asociativo)
# filtramos con IF para que no presente los valores de array escalar
# con lo que nuestra lista contendrá solo LAS CLAVES y los VALORES
# del array asociativo devuelto

########################################################################
#     GENERACION DE LA SENTENCIA MySQL que CREARA la NUEVA TABLA       #
########################################################################

# creamos la variable que recoge la SENTENCIA MySQL y le insertamos
# este texto que ves (¿verdad que no te resulta desconocido?)
# fijate que insertamos la variable $nueva que contiene el nombre
# de la NUEVA TABLA

$parrafo="CREATE TABLE IF NOT EXISTS $nueva(";

# Inicializamos a cero UNA VARIABLE CONTADOR
# más abajo verás para que la he usado... paciencia

$i=0;

# insertamos el bucle que va leyendo el identificador de resultado
# con los datos devueltos por SHOW FIELDS

while($v=mysql_fetch_array ($resultado)){

# vamos leyendo el array y recogiendo CLAVES y VALORES


foreach($v as $clave=>$valor) {

# filtramos los valores leidos para recoger solo aquellos valores del array
# en los que las claves son NO NUMERICAS (claves de la matriz asociativa unicamente)
# recuerda que mysql_fetch_array devuelve un array escalar y otro asociativo

    
if(!is_int($clave)){
            
            
# La estructuras de los campos van separadas por una coma
            # así que en este IF añadimos esa coma DELANTE del nombre del campo
            # que es recogido en la matriz asociativa con la clave FIELD
            # con la variable $i evitamos que ponga esa coma
            # delante del PRIMER NOMBRE de CAMPO
            # no funcionaría algo así
            # CREATE TABLE IF NOT EXISTS $nueva(, Nombre
            # ¿capicchi..?

            
if ($i>and $clave =="Field"){$valor=", ".$valor;}

            
# Los valores DEFAULT deben ir escrito entere comillas
            # en la sentencia MySQL, asi que tendremos que modificar
            # el valor que devuelve SHOW FIELDS y ponerle
            # las comillas y la palabra DEFAULT
            # claro que SOLO EN EL CASO DE QUE HAYA UN VALOR POR DEFECTO
            # ¿ok...?
            
            
if ($clave=="Default" and $valor!=""){$valor="DEFAULT '".$valor."'";}
            
            
# La instrucción SHOW FIELDS cuando analiza la clave devuelve
            # YES o nada
            # pero la SENTENCIA CREATE TABLE solo admite NULL o NOT NULL
            # asi que... no la privamos de ese gustazo
            # y le decimos que cuando el valor sea YES que lo cambie por NULL

            
if ($clave=="Null" and $valor="YES"){$valor=" NULL";} 

        
# un espacio delante de los valores evita errores
        # no vaya a ser que se peguen las cadenas y la liemos
        # asi que ... ¡¡marchando... un espaco delante del valor

        
$parrafo.=" ".$valor;    
     }

}

# acabamos de salir del foreach, asi que 
# eso significa que ya hemos escrito el nombre del primer campo
# si incrementamos el contador el valor de $i nunca más valdrá cero
# y a partir de ahora YA TENDRA QUE PONER COMAS DELANTE DEL NOMBRE DEL CAMPO

$i++;

}

# Ya tenemos escrito TODO solo nos falta CERRAR PARENTESIS
# en la SENTENCIA CREATE
# valeeeeee... pues lo añadimos y listo... Calixto

$parrafo.=")";


#ahora creamos la tabla, igual que habíamos hecho anteriormente


 
if(mysql_db_query ($base,$parrafo,$conexion)) {
echo 
"<h2> Tabla $nueva ha sido creada con EXITO </h2><br>";
    }else{
echo 
"<h2> La tabla $nueva NO HA PODIDO CREARSE</h2><br>";
}; 

# liberamos memoria borrando de ella el resultado

mysql_free_result ($resultado);


# cerramos la conexion con el servidor

mysql_close($conexion);
?>