我正在处理“描述表”输出以显示字段列表及其类型,我希望我的主键位于列表的顶部。 我认为没有办法使用SQL(类似'order by')来描述结果,而不是用PHP对它进行排序。
你觉得男人们怎么样? 感谢答案 0 :(得分:14)
当您执行SHOW COLUMNS
或DESCRIBE TABLE
时,您实际上只是使用名为INFORMATION_SCHEMA
的内置特殊数据库来提取有关命名表的信息。有趣的是,它似乎不会将信息作为表返回,因此不可能将这些函数返回的数据用作表格(用于排序,子查询等)。
幸运的是,您可以设置自己的查询以执行与SHOW或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;
除了OP:感谢您鼓励我再次查看如何执行此操作。我曾经知道如何做到但已经忘记了。
答案 1 :(得分:2)
你是对的。 MySQL将始终按实际顺序输出列 - 也就是说,它们实际存储在表的数据中的顺序。
您可以在表中物理移动列,以便首先使用主键,但这需要MySQL锁定表并以新顺序重写其整个数据。这几乎是不值得的。
如果你只是想提出一个好的输出,无论表格的实际结构如何,你都可以用PHP对列进行排序,也许可以使用简单的usort()
调用。
答案 2 :(得分:-2)
不要使用describe,而是使用大多数dbms提供的架构信息表。 然后,您可以使用简单的选择来获取您的信息。