views:

17

answers:

1

Hello,

I am trying to list all the mysql databases and their respective tables, I am currently using this, but can anybody recommend if there is any better way.

$q = $this->db->query('SHOW DATABASES');
$databases = $q->result_array();

foreach($databases as $db) {
  $this->db->query('USE '. $db['Database']);

  $q = $this->db->query('SHOW TABLES');
  $tables = $q->result_array();             
}
+1  A: 

You can use the information_schema special database, which has tables that describe all the other databases, tables, and columns.

That way you only need 1 query:

SELECT table_schema, table_name
FROM information_schema.tables
ORDER BY table_schema, table_name;
Fanis
I am a learner can you please tell me whether this `information_schema` table is available for all default MySQL Installations? Also is it available v4+ or v5+?
Shishant
@Shishant it was only added to mysql starting in version 5.0.2: http://dev.mysql.com/tech-resources/articles/mysql-datadictionary.html - before that you should use `SHOW` as you have already.
Fanis
Thank You very much
Shishant