2010-06-11 33 views
9

Tôi đang làm việc trên đầu ra "mô tả bảng" để hiển thị danh sách các trường và loại của chúng, tôi muốn các khóa chính của tôi nằm ở đầu danh sách .. Tôi nghĩ không có cách nào để sắp xếp kết quả mô tả bằng SQL như 'order by') hơn là phân loại nó trong PHP.Cách sạch nhất để sắp xếp kết quả truy vấn "mô tả bảng" là gì?

bạn nghĩ sao? cảm ơn

+0

Có liên quan, nếu bạn quan tâm, tôi đã viết * Mô tả tất cả các bảng * trong [Câu trả lời này] (http://stackoverflow.com/a/38679580). Bạn có thể thay đổi thứ tự 'by' bằng cách thoát ra khỏi cmd của chúng và đi vào loại linh hoạt này. – Drew

Trả lời

2

Bạn chính xác. MySQL sẽ luôn xuất các cột theo thứ tự thực tế của chúng - tức là thứ tự chúng được lưu trữ trong dữ liệu của bảng.

Bạn có thể di chuyển các cột xung quanh trong bảng để khóa chính trước tiên, mặc dù điều này sẽ yêu cầu MySQL khóa bảng và ghi lại toàn bộ dữ liệu theo thứ tự mới. Đó là gần như không bao giờ đáng giá.

Nếu bạn chỉ quan tâm đến việc trình bày đầu ra đẹp, bất kể bảng được cấu trúc thực sự như thế nào, bạn có thể sắp xếp các cột trong PHP, có thể sử dụng cuộc gọi usort() đơn giản.

-2

Không sử dụng mô tả nhưng sử dụng bảng thông tin lược đồ được cung cấp bởi hầu hết các dbms. Sau đó, bạn có thể sử dụng các lựa chọn đơn giản để lấy thông tin của mình.

+0

Điều này về cơ bản là nói "google cho bảng thông tin lược đồ". Một liên kết, mã, hoặc bất cứ điều gì cụ thể cho mysql sẽ có ích. –

14

Khi bạn thực hiện SHOW COLUMNS hoặc DESCRIBE TABLE, bạn thực sự chỉ sử dụng cơ sở dữ liệu đặc biệt nội tuyến được gọi là INFORMATION_SCHEMA để lấy thông tin về bảng được đặt tên. Điều thú vị là, có vẻ như không trả lại thông tin dưới dạng bảng, vì vậy không thể lấy dữ liệu được trả về bởi các hàm đó để hoạt động như một bảng (để phân loại, truy vấn phụ, v.v ...).

May mắn thay, bạn có thể thiết lập truy vấn của riêng bạn để thực hiện tra cứu giống như hiển thị hoặc MÔ TẢ:

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; 

Ngoài để OP: Cảm ơn đã cho tôi động lực để tìm kiếm làm thế nào để làm điều này một lần nữa. Tôi đã từng biết cách làm điều này nhưng đã quên.

+2

FYI (có lẽ hiển nhiên) đối với bất kỳ ai chạy điều này: Đảm bảo thay thế '' bảng '' bằng tên của bảng mà bạn muốn mô tả và ''database'' với tên của cơ sở dữ liệu. – jesseplymale

Các vấn đề liên quan