我正在处理“描述表”输出以显示字段列表及其类型,我希望我的主键位于列表的顶部。我认为无法使用 SQL 对描述的结果进行排序(类似于“订单” by') 而不是在 PHP 中对其进行排序。
你们觉得怎么样 ?谢谢
当您执行 aSHOW COLUMNS
或 aDESCRIBE TABLE
时,您实际上只是使用内置的特殊数据库调用INFORMATION_SCHEMA
来提取有关命名表的信息。有趣的是,它似乎没有将信息作为表格返回,因此不可能让这些函数返回的数据像表格一样(用于排序、子查询等)。
幸运的是,您可以设置自己的查询来执行与SHOW
or相同的查找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;
你是对的。MySQL 将始终按照它们的实际顺序输出列——即它们物理存储在表数据中的顺序。
您可以在表中物理移动列,以便主键在前,但这需要 MySQL 锁定表并以新顺序重写其整个数据。这几乎是不值得的。
如果您只是对呈现漂亮的输出感兴趣,无论表格的实际结构如何,您确实可以在 PHP 中对列进行排序,也许使用一个简单的usort()
调用。
不要使用 describe,而是使用大多数 dbms 提供的模式信息表。然后您可以使用简单的选择来获取您的信息。