【问题标题】:Adding a table count to my listing of databases将表数添加到我的数据库列表中
【发布时间】:2016-05-04 14:10:47
【问题描述】:

我想列出我所有的自定义数据库:

SELECT `SCHEMA_NAME` AS 'Database',
       `DEFAULT_CHARACTER_SET_NAME` AS 'Character Set',
       `DEFAULT_COLLATION_NAME` AS 'Collation'
  FROM `information_schema`.`SCHEMATA`
  WHERE `SCHEMA_NAME` NOT IN ('information_schema','mysql','performance_schema')
  ORDER BY `SCHEMA_NAME` ASC

但我想包括每个数据库中的表数:

SELECT `TABLE_SCHEMA`, COUNT(*)
  FROM `information_schema`.`TABLES`
  WHERE `TABLE_SCHEMA` NOT IN ('information_schema','mysql','performance_schema')
  GROUP BY `TABLE_SCHEMA`

...在一个表中:

[
  0 => [ 'Database'=>'customDb1', ..., 'Table Count'=>3 ],
  1 => [ 'Database'=>'customDb2', ..., 'Table Count'=>8 ],
  2 => [ 'Database'=>'customDb3', ..., 'Table Count'=>0 ]
]

我知道运行第一个查询,在 PHP 中循环遍历每个数据库,然后运行第二个查询比使用表 JOIN 之类的东西效率低得多,但我只是没有掌握 JOIN 语法。 Lynda tutorial 我只是通过这个(可能)复杂的语言部分,我尝试的一切都只是抛出错误或糟糕的结果。

我确信这是创建 MySQL 数据库接口的开发人员的常见查询。如何使用 MySQL 查询将表数添加到我的数据库列表中?

【问题讨论】:

    标签: php mysql join


    【解决方案1】:

    试试这个:

    SELECT s.`SCHEMA_NAME` AS 'Database',
           s.`DEFAULT_CHARACTER_SET_NAME` AS 'Character Set',
           s.`DEFAULT_COLLATION_NAME` AS 'Collation',
           COALESCE(COUNT(t.`TABLE_SCHEMA`),0) as table_cnt
    FROM `information_schema`.`SCHEMATA` s
    LEFT JOIN `information_schema`.`TABLES` t
     ON(s.`SCHEMA_NAME` = t.`TABLE_SCHEMA`)
    WHERE s.`SCHEMA_NAME` NOT IN ('information_schema','mysql','performance_schema')
    GROUP BY s.`SCHEMA_NAME`
    ORDER BY s.`SCHEMA_NAME` ASC
    

    【讨论】:

    • 是的,我注意到当你写那条评论时:) @colburton
    • 非常感谢。我想我在需要INNER JOIN 时使用了JOINs,我仍然需要了解其中的差异。这绝对可以加速/清理一切!
    • @philtune INNER JOINJOIN 相同,如果您发布了您的尝试,我会告诉您您做错了什么。
    • 啊,我有很多糟糕的尝试,只是猜测,我会不好意思向任何人展示。 :) 感谢您的快速帮助!
    • 哦,我有一个问题。它仅显示已定义表的数据库。我仍然想在我的列表中包含空数据库。
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2015-02-12
    • 2017-02-10
    • 2011-05-11
    相关资源
    最近更新 更多