2010-06-11 11 views
9

estoy trabajando en "describir mesa" de salida para mostrar una lista de campos y sus tipos, quiero que mis claves primarias para estar en la parte superior de la lista .. Creo que no hay manera de ordenar de describir los resultados utilizando SQL (algo como 'ordenar por') en lugar de ordenarlo en PHP.¿Cuál es la forma más limpia de ordenar los resultados de la consulta "describir la tabla"?

¿qué te parece chicos? gracias

+0

relacionada, si es de su interés, me escribió un * Describir todas las tablas * [en esta respuesta] (http://stackoverflow.com/a/38679580). Puede cambiar el 'orden por' saliéndose de su cmd y entrando en este tipo de flexible. – Drew

Respuesta

2

Usted es correcta. MySQL siempre generará columnas en su orden real, es decir, la orden en que se almacenan físicamente en los datos de la tabla.

Puede mover físicamente columnas en torno a su mesa, así que las claves primarias son en primer lugar, aunque esto requerirá MySQL para bloquear la tabla y volver a escribir sus datos completos en el nuevo orden. Eso casi nunca vale la pena.

Si solo está interesado en presentar un buen resultado, independientemente de cómo esté realmente estructurada la tabla, puede ordenar las columnas en PHP, quizás utilizando una simple llamada usort().

-2

No utilice describir pero el uso de las tablas de información de esquema que son proporcionados por la mayoría de los DBMS. Luego puede usar selecciones simples para obtener su información.

+0

Esto básicamente dice "google for schema information tables". Un enlace, código o cualquier cosa específica para mysql habría sido útil. –

14

Cuando hace un SHOW COLUMNS o DESCRIBE TABLE, en realidad está utilizando la base de datos especial incorporada llamada INFORMATION_SCHEMA para obtener información sobre una tabla con nombre. Lo curioso es que parece que no devuelve la información como una tabla, por lo que es imposible hacer que los datos devueltos por esas funciones actúen como una tabla (para clasificar, sub-buscar, etc.).

Afortunadamente, usted puede configurar su propia consulta para realizar la misma consulta de SHOW o describir:

select COLUMN_NAME as 'Field', 
     COLUMN_TYPE as 'Type', 
     IS_NULLABLE as 'Null', 
     COLUMN_KEY  as 'Key', 
     COLUMN_DEFAULT as 'Default', 
     EXTRA   as 'Extra' 
    from INFORMATION_SCHEMA.COLUMNS 
     where TABLE_NAME = 'my table' and 
       TABLE_SCHEMA = 'my database' 

    -- add ordering -- 
    order by Type; 

Aparte de OP: Gracias por darme incentivo para buscar la manera de hacer esto de nuevo. Una vez supe cómo hacer esto, pero lo había olvidado.

+2

FYI (quizás obvio) para cualquiera que ejecute esto: asegúrese de reemplazar '' table'' con el nombre de la tabla que desea describir, y '' database'' con el nombre de la base de datos en la que se encuentra. – jesseplymale

Cuestiones relacionadas