2010-12-13 4 views
5

Quelqu'un pourrait m'aider avec ce problème de mysql? J'essaye d'obtenir le nom de toutes les tables d'un DB.tables assorties nom avec show tables

Dans mon db je tables comme:

_table1, _table2, table3, TABLE4, table5_xrefs

mais je veux que les tables sans _ au début et sans _xref à la fin. Donc, dans cet exemple, j'ai seulement besoin de table3 et table4. J'utilise show tables pour afficher le nom de tous les tableaux et après j'utilise php pour correspondre au nom correct de la table. Je me demandais si je pouvais faire la même chose en utilisant seulement une requête mysql.

Répondre

33

Il est possible mais vous devez savoir que le nom de colonne renvoyé par SHOW TABLES est la concaténation de la chaîne tables_in_ et le nom de votre base de données. Donc, il ressemblerait à ceci, pour la base de données test:

SHOW TABLES 
     WHERE tables_in_test NOT LIKE '\_%' 
     AND tables_in_test NOT LIKE '%\_xrefs' 

Mais je préfère utiliser la base de données information_schema pour obtenir cette information:

SELECT TABLE_NAME 
    FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = SCHEMA() /* = 'test'*/ 
    AND TABLE_NAME NOT LIKE '\_%' 
    AND TABLE_NAME NOT LIKE '%\_xrefs' 
+0

Merci beaucoup. J'ai réalisé que la première requête est plus rapide que la seconde? Pourquoi préférez-vous utiliser celui-là? – Katie

+0

Principalement pour la cohérence, j'utilise information_schema pour obtenir beaucoup plus d'informations sur les tables et les champs dans mes applications. La deuxième raison est que je n'aime pas avoir de variables dans les noms de colonnes - il ne peut pas être facilement mis en procédure stockée. –

-1

Vous pouvez use LIKE or WHERE dans les requêtes SHOW TABLES.

+0

Oui, cela est vrai. Je peux utiliser 'comme' mais je ne peux pas utiliser 'ne pas aimer' ou je me trompe – Katie