2010-12-13 12 views
5

¿Podría alguien ayudarme con este problema de mysql? Estoy tratando de obtener el nombre de todas las tablas de un db.tablas de correspondencia nombre con mostrar tablas

En mi db tengo tablas como:

_table1, _table2, cuadro3, Table4, table5_xrefs

pero quiero obtener sólo las tablas sin _ al principio y sin _xref en el fin. Entonces, en este ejemplo, solo necesito table3 y table4.

Estoy usando show tables para mostrar todas las tablas y después de usar php para que coincida con el nombre correcto de la tabla. Me preguntaba si podría hacer lo mismo usando solo una consulta de MySQL.

Respuesta

33

Es posible pero debe saber que el nombre de la columna devuelto por SHOW TABLES es la concatenación de la cadena tables_in_ y el nombre de la base de datos. Por lo tanto, sería así, por la base de datos test:

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

Pero yo preferiría usar information_schema base de datos para obtener esta información:

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

Muchas gracias. Me di cuenta de que la primera consulta es más rápida que la segunda. ¿Por qué prefieres usar ese? – Katie

+0

Principalmente por coherencia, estoy usando information_schema para obtener mucha más información sobre tablas y campos en mis aplicaciones. La segunda razón es que no me gusta tener una variable en los nombres de columna; no se puede poner fácilmente en el procedimiento almacenado. –

-1

Puede use LIKE or WHERE en las consultas SHOW TABLES.

+0

Sí, esto es cierto. Puedo usar 'me gusta' pero no puedo usar 'no me gusta' o estoy equivocado – Katie

Cuestiones relacionadas