Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将表计数添加到我的数据库列表中_Php_Mysql_Join - Fatal编程技术网

Php 将表计数添加到我的数据库列表中

Php 将表计数添加到我的数据库列表中,php,mysql,join,Php,Mysql,Join,我想列出我的所有自定义数据库: 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','mysq

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

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
语法。我所做的只是通过这个相当(潜在)复杂的语言部分,我尝试的每件事都会抛出错误或糟糕的结果

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

试试以下方法:

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非常感谢。我想我是在使用
JOIN
s时需要
internaljoin
,我仍然需要仔细阅读差异。这肯定会加快/清理速度@philtune
internal JOIN
JOIN
相同,如果你发布了你的尝试,我会告诉你你做错了什么。啊,我有很多不好的尝试只是猜测,我会不好意思向任何人展示它们。:)谢谢你的快速帮助!哦,我有一个问题。它只显示定义了表的数据库。我仍然希望在列表中包含空数据库。