2010-06-11 9 views
9

Ich arbeite an "Describe-Tabelle" Ausgabe, um eine Liste von Feldern und ihren Typen zu zeigen, ich möchte meine Primärschlüssel an der Spitze der Liste sein .. Ich denke, es gibt keine Möglichkeit, beschreiben die Ergebnisse mit SQL (etwas wie 'order by'), anstatt es in PHP zu sortieren.Was ist der sauberste Weg, die Abfrageergebnisse von "Tabelle beschreiben" zu sortieren?

was denkst du, Leute? danke

+0

Verwandte, wenn es von Interesse ist, schrieb ich eine * Beschreibe alle Tabellen * in [diese Antwort] (http://stackoverflow.com/a/38679580). Sie können die 'order by' ändern, indem Sie aus ihrem cmd ausbrechen und in diese Art von flexiblem einsteigen. – Drew

Antwort

2

Sie haben Recht. MySQL gibt Spalten immer in ihrer tatsächlichen Reihenfolge aus, dh in der Reihenfolge, in der sie in den Daten der Tabelle gespeichert sind.

Sie können Spalten innerhalb Ihrer Tabelle physisch verschieben, so dass die Primärschlüssel zuerst sind. Dies erfordert jedoch, dass MySQL die Tabelle sperrt und ihre gesamten Daten in der neuen Reihenfolge umschreibt. Das lohnt sich fast nie.

Wenn Sie nur nette Ausgabe präsentieren möchten, unabhängig davon, wie die Tabelle tatsächlich strukturiert ist, können Sie tatsächlich die Spalten in PHP sortieren, vielleicht mit einem einfachen usort() Aufruf.

-2

Verwenden Sie nicht beschreiben, sondern verwenden Sie die Schema-Informationstabellen, die von den meisten dbms zur Verfügung gestellt werden. Dann können Sie einfache auswählen, um Ihre Informationen zu erhalten.

+0

Dies ist im Grunde sagen "google für Schema Informationstabellen". Ein Link, Code oder irgendetwas, das für mysql spezifisch ist, wäre hilfreich gewesen. –

14

Wenn Sie eine SHOW COLUMNS oder eine DESCRIBE TABLE tun, verwenden Sie wirklich nur die eingebaute spezielle Datenbank namens INFORMATION_SCHEMA, um Informationen über eine benannte Tabelle zu ziehen. Das Lustige daran ist, dass die Informationen nicht als Tabelle zurückgegeben werden. Daher ist es unmöglich, die von diesen Funktionen zurückgegebenen Daten als Tabelle zu speichern (zum Sortieren, Unterquerying usw.).

Glücklicherweise können Sie Ihre eigene Abfrage auszuführen, um die gleiche Lookup wie SHOW einrichten oder DESCRIBE:

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; 

Abgesehen auf OP: Dank für die mir Ansporn zu sehen, wie dies wieder zu tun. Ich wusste einmal, wie das geht, aber ich habe es vergessen.

+2

FYI (vielleicht offensichtlich) für alle, die dies ausführen: Stellen Sie sicher, "Tabelle" durch den Namen der Tabelle zu ersetzen, die Sie beschreiben möchten, und "Datenbank" mit dem Namen der Datenbank, in der es sich befindet. – jesseplymale