2010-12-13 37 views
5

有人可以帮我解决这个mysql问题吗?我试图从一个数据库中获取所有表名。匹配的表名与显示表

在我的分贝我有这样的表:

_table1, _table2, 表3, 表4, table5_xrefs

,但我想只有不表_在开始和无_xref在结束。 所以在这个例子中我只需要table3和table4。

我使用show tables来显示所有的表名称,并在我使用php来匹配正确的表名。我想知道如果我只能使用mysql查询来做同样的事情。

回答

33

这是可能的,但你必须知道从SHOW TABLES返回的列名称查询是字符串tables_in_和您的数据库名称的串联。因此,它是这样的,对于数据库test

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

但我更愿意用information_schema数据库得到这个信息:

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

非常感谢。我意识到第一个查询比第二个查询快?你为什么喜欢使用那个? – Katie 2010-12-13 18:48:14

+0

主要是为了保持一致性,我使用information_schema获取更多关于应用程序中表和字段的信息。第二个原因是我不喜欢在列名中有变量 - 它不能轻易地放入存储过程中。 – 2010-12-13 19:06:47

-1

您可以在SHOW TABLES查询中use LIKE or WHERE

+0

是的,这是事实。我可以使用'喜欢',但我不能使用'不喜欢'或我错了 – Katie 2010-12-13 18:38:59