Respuestas:
La mejor manera es usar la base de datos virtual de metadatos INFORMATION_SCHEMA . Específicamente la tabla INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Es MUY poderoso y puede brindarle TONELADAS de información sin necesidad de analizar el texto (como el tipo de columna, si la columna es anulable, el tamaño máximo de la columna, el conjunto de caracteres, etc.) ...
Ah, y es SQL estándar (mientras que SHOW ...
es una extensión específica de MySQL) ...
Para obtener más información sobre la diferencia entre SHOW...
y el uso de las INFORMATION_SCHEMA
tablas, consulte la documentación deINFORMATION_SCHEMA
MySQL en general ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
antemano también, pero realmente no me gusta eso. Y no tengo ningún problema con los ticks de retroceso para la delimitación de identificadores. De hecho, yo como ellos mejor que comillas (comillas dobles hace que la sensación equivocada de consulta para mí) ... Para cada uno su propio ...
Puede usar la siguiente consulta para MYSQL:
SHOW columns FROM your-table;
A continuación se muestra el código de ejemplo que muestra cómo implementar la sintaxis anterior en php para enumerar los nombres de las columnas:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Para obtener detalles sobre la salida de la SHOW COLUMNS FROM TABLE
visita: MySQL Refrence.
DESC TableName;
;-)
Parece que hay 2 formas:
DESCRIBE `tablename`
o
SHOW COLUMNS FROM `tablename`
Más DESCRIBE
aquí: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
es solo un atajo para SHOW COLUMNS FROM
.
DESC
es aún más corto para DESCRIBE
!
Editar : Hoy aprendí la mejor manera de hacer esto. Por favor, consulte la respuesta de ircmaxell.
Analiza la salida de SHOW COLUMNS FROM table;
Aquí hay más información al respecto aquí: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Use mysql_fetch_field()
para ver todos los datos de la columna. Ver manual .
$query = 'select * from myfield';
$result = mysql_query($query);
$i = 0;
while ($i < mysql_num_fields($result))
{
$fld = mysql_fetch_field($result, $i);
$myarray[]=$fld->name;
$i = $i + 1;
}
"Advertencia Esta extensión está en desuso a partir de PHP 5.5.0 y se eliminará en el futuro".
mysqli_num_fields()
y mysqli_fetch_field_direct()
son los métodos actualizados
Una antigua función PHP "mysql_list_fields ()" está en desuso. Entonces, hoy la mejor forma de obtener nombres de campos es una consulta "MOSTRAR COLUMNAS DE nombre_tabla [COMO 'nombre']". Entonces, aquí hay un pequeño ejemplo:
$fields = array();
$res=mysql_query("SHOW COLUMNS FROM mytable");
while ($x = mysql_fetch_assoc($res)){
$fields[] = $x['Field'];
}
foreach ($fields as $f) { echo "<br>Field name: ".$f; }
function get_col_names(){
$sql = "SHOW COLUMNS FROM tableName";
$result = mysql_query($sql);
while($record = mysql_fetch_array($result)){
$fields[] = $record['0'];
}
foreach ($fields as $value){
echo 'column name is : '.$value.'-';
}
}
return get_col_names();
No estoy seguro de si esto es lo que estaba buscando, pero esto funcionó para mí:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Eso devuelve una matriz simple de nombres de columnas / nombres de variables en su tabla o matriz como cadenas, que es lo que necesitaba para generar dinámicamente consultas MySQL. Mi frustración fue que simplemente no sé cómo indexar matrices en PHP muy bien, así que no estaba seguro de qué hacer con los resultados de DESC o SHOW. ¡Espero que mi respuesta sea útil para principiantes como yo!
Para verificar el resultado: print_r($col_names);
cuando desee verificar la estructura de todas las tablas con algunos archivados, use este código. En esta consulta selecciono column_name, column_type y table_name para más detalles. Uso order by column_type para poder verlo fácilmente.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Si desea marcar solo el tipo doble archivado, puede hacerlo fácilmente
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' AND DATA_TYPE like '%bigint%' order by DATA_TYPE;
si desea verificar qué campo permite el tipo nulo, etc., puede usar esto
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' and DATA_TYPE like '%bigint%' and IS_NULLABLE ='NO' order by COLUMN_TYPE;
desea comprobar más, luego este enlace también lo ayudará.
SHOW COLUMNS en mysql 5.1 (no 5.5) usa una tabla de disco temporal.
Por lo tanto, puede considerarse lento para algunos casos. Al menos, puede aumentar su valor created_tmp_disk_tables . Imagine una tabla de disco temporal por conexión o por cada solicitud de página.
MOSTRAR COLUMNAS no es realmente tan lento, posiblemente porque usa caché del sistema de archivos. Phpmyadmin dice ~ 0.5ms consistentemente. Esto no es nada en comparación con 500ms-1000ms de servir una página de WordPress. Pero aún así, hay veces que importa. Existe una participación del sistema de disco, nunca se sabe lo que sucede cuando el servidor está ocupado, el caché está lleno, el disco duro está bloqueado, etc.
La recuperación de los nombres de columna a través de SELECT * FROM ... LIMIT 1 fue de alrededor de ~ 0.1ms, y también puede usar la caché de consultas.
Así que aquí está mi pequeño código optimizado para obtener nombres de columnas de una tabla, sin usar show columnas si es posible:
function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();
global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
return $db_columns_ar_cache[$table];
//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
{
foreach($row as $name=>$val)
$cols[$name]=$name;
}
else
{
$coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
if($coldata)
foreach($coldata as $row)
$cols[$row->Field]=$row->Field;
}
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}
Notas:
Prueba este, yo personalmente lo uso:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Esta pregunta es antigua, pero llegué aquí buscando una manera de encontrar una consulta determinada con sus nombres de campo de forma dinámica (no necesariamente solo los campos de una tabla). Y dado que la gente sigue señalando esto como la respuesta para esa tarea dada en otras preguntas relacionadas, comparto la forma en que descubrí que se puede hacer, usando los consejos de Gavin Simpson:
//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
$rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
if(mysqli_num_rows($rsResult)>0)
{
//We start with header. >>>Here we retrieve the field names<<<
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
$i = 0;
while ($i < mysqli_num_fields($rsResult)){
$field = mysqli_fetch_field_direct($rsResult, $i);
$fieldName=$field->name;
echo "<td><strong>$fieldName</strong></td>";
$i = $i + 1;
}
echo "</tr>";
//>>>Field names retrieved<<<
//We dump info
$bolWhite=true;
while ($row = mysqli_fetch_assoc($rsResult)) {
echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
$bolWhite=!$bolWhite;
foreach($row as $data) {
echo "<td>$data</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
Esto se puede modificar fácilmente para insertar los nombres de campo en una matriz.
Usando un simple: $sql="SELECT * FROM myTable LIMIT 1"
puede darle los campos de cualquier tabla, sin necesidad de usarSHOW COLUMNS
o ningún módulo php adicional, si es necesario (eliminando la parte de volcado de datos).
Esperemos que esto ayude a alguien más.
si usas php, usa esta esencia .
puede obtener información completa de campos seleccionados sin resultado, y todos los campos personalizados como:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
si arriba de sql no devuelve datos, también obtendrá los nombres de campo aname, bname, otro nombre de campo de b
solo dos líneas:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Esta consulta obtiene una lista de todas las columnas de una base de datos sin tener que especificar un nombre de tabla. Devuelve una lista de solo nombres de columna:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Sin embargo, cuando ejecuté esta consulta en phpmyadmin, mostró una serie de errores. No obstante, funcionó. Así que úsalo con precaución.
La solución más simple de todas las respuestas:
DESC `table name`
o
DESCRIBE `table name`
o
SHOW COLUMNS FROM `table name`
si solo necesita los nombres y tipos de campo (quizás para copiar y pegar fácilmente en Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
eliminar
DATA_TYPE='decimal'
si quieres todos los tipos de datos
No soy un experto, pero esto funciona para mí.
$sql = "desc MyTable";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>"; // returns the first column of array. in this case Field
// the below code will return a full array-> Field,Type,Null,Key,Default,Extra
// for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";}
}
He intentado esta consulta en SQL Server y esto funcionó para mí:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')