13

我正在处理“描述表”输出以显示字段列表及其类型,我希望我的主键位于列表的顶部。我认为无法使用 SQL 对描述的结果进行排序(类似于“订单” by') 而不是在 PHP 中对其进行排序。

你们觉得怎么样 ?谢谢

4

3 回答 3

20

当您执行 aSHOW COLUMNS或 aDESCRIBE TABLE时,您实际上只是使用内置的特殊数据库调用INFORMATION_SCHEMA来提取有关命名表的信息。有趣的是,它似乎没有将信息作为表格返回,因此不可能让这些函数返回的数据像表格一样(用于排序、子查询等)。

幸运的是,您可以设置自己的查询来执行与SHOWor相同的查找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 COLUMN_TYPE;
于 2010-06-11T13:24:09.360 回答
3

你是对的。MySQL 将始终按照它们的实际顺序输出列——即它们物理存储在表数据中的顺序。

您可以在表中物理移动列,以便主键在前,但这需要 MySQL 锁定表并以新顺序重写其整个数据。这几乎是不值得的。

如果您只是对呈现漂亮的输出感兴趣,无论表格的实际结构如何,您确实可以在 PHP 中对列进行排序,也许使用一个简单的usort()调用。

于 2010-06-11T12:44:24.883 回答
-2

不要使用 describe,而是使用大多数 dbms 提供的模式信息表。然后您可以使用简单的选择来获取您的信息。

于 2010-06-11T12:46:39.547 回答