2010-06-11 5 views
9

Pracuję nad wyjściem "opisz tabelę", aby wyświetlić listę pól i ich typów, chcę, aby moje klucze główne były u góry listy. Myślę, że nie ma sposobu na posortowanie wyników opisu za pomocą SQL (coś jak "zamówienie przez") zamiast sortowania go w PHP.Jaki jest najczystszy sposób sortowania wyników zapytania "opisz tabelę"?

co o tym sądzisz? dziękuje

+0

Powiązane, jeśli to interesujące, napisałem * Opisz wszystkie tabele * w [tej odpowiedzi] (http://stackoverflow.com/a/38679580). Możesz zmienić 'order by' , wyłamując się z ich cmd i wchodząc w ten rodzaj elastycznego. – Drew

Odpowiedz

2

Masz rację. MySQL zawsze będzie wyświetlał kolumny w ich rzeczywistej kolejności - czyli kolejności, w jakiej są fizycznie przechowywane w danych tabeli.

Możesz fizycznie przenosić kolumny w obrębie stołu, tak aby klucze podstawowe były pierwsze, ale będzie to wymagało zablokowania tabeli przez MySQL i przepisania jej wszystkich danych w nowej kolejności. To prawie nigdy nie jest warte zachodu.

Jeśli interesuje Cię tylko przedstawienie ładnych wyników, niezależnie od tego, jak tabela jest rzeczywiście zorganizowana, możesz rzeczywiście posortować kolumny w PHP, być może za pomocą prostego wywołania usort().

-2

Nie należy opisywać, ale należy korzystać z tabel z informacjami o schematach, które są dostarczane przez większość programów dbms. Następnie można użyć prostych wyborów, aby uzyskać informacje.

+0

Jest to w zasadzie mówiąc "Google dla tabel informacji o schemacie". Pomocne byłoby łącze, kod lub cokolwiek specyficzne dla mysql. –

14

Kiedy robisz SHOW COLUMNS lub DESCRIBE TABLE, tak naprawdę używasz wbudowanej specjalnej bazy danych o nazwie INFORMATION_SCHEMA, aby pobrać informacje o nazwanej tabeli. Zabawne jest to, że nie zwraca informacji w postaci tabeli, więc nie jest możliwe, aby dane zwracane przez te funkcje działały jak tabela (do sortowania, podkwerendowania itp.).

szczęście, można utworzyć własne zapytanie do wykonywania tego samego odnośnika jak pokazać lub opisywać:

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; 

bok, aby OP: Dzięki za danie mi motywację, aby spojrzeć w górę, jak to zrobić ponownie. Kiedyś wiedziałem, jak to zrobić, ale zapomniałem.

+2

FYI (być może oczywiste) dla każdego, kto to prowadzi: upewnij się, że zamieniasz ''table'' na nazwę tabeli, którą chcesz opisać, oraz'' database'' z nazwą bazy danych, w której się znajduje. – jesseplymale