我想列出我的所有自定义数据库:
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`...in一个表:
[
0 => [ 'Database'=>'customDb1', ..., 'Table Count'=>3 ],
1 => [ 'Database'=>'customDb2', ..., 'Table Count'=>8 ],
2 => [ 'Database'=>'customDb3', ..., 'Table Count'=>0 ]
]我知道,运行第一个查询(在PHP中遍历每个数据库)和运行第二个查询要比使用表JOIN之类的查询效率低得多,但我只是没有掌握JOIN语法。我正在使用的琳达教程就在语言的这个相当(可能)复杂的部分中传播开来,而我所尝试的每一件事都会抛出错误或糟糕的结果。
我确信,对于创建MySQL数据库接口的开发人员来说,这是一个常见的查询。如何仅使用MySQL查询将表计数添加到数据库列表中?
发布于 2016-05-04 14:20:38
试试这个:
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` ASChttps://stackoverflow.com/questions/37030290
复制相似问题