2010-12-13 5 views
5

누군가이 MySQL 문제를 해결할 수 있습니까? DB에서 모든 테이블 이름을 가져 오려고합니다. 의 시작과 _xref없이 _테이블 이름과 테이블 테이블이 일치

_table1, _table2, 표 3, 표 4, table5_xrefs

하지만 난이없는 테이블 만 싶어 내 DB에

내가 좋아하는 테이블이 끝. 이 예제에서는 table3과 table4 만 필요합니다.

모든 테이블 이름을 표시하고 올바른 테이블 이름과 일치하도록 PHP를 사용하면 show tables을 사용하고 있습니다. mysql 쿼리 만 사용하여 동일한 작업을 수행 할 수 있는지 궁금합니다.

답변

33

가능하지만 SHOW TABLES에서 반환 된 열 이름은 tables_in_ 문자열과 데이터베이스 이름의 연결임을 알아야합니다.

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

을하지만이 정보를 얻을 수 information_schema 데이터베이스를 사용하는 것을 선호 : 그래서 데이터베이스 test를 들어, 다음과 같을 것이다

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

+0

주로 일관성을 위해 information_schema를 사용하여 응용 프로그램의 테이블과 필드에 대한 더 많은 정보를 얻습니다. 두 번째 이유는 열 이름에 변수가 있다는 것을 싫어한다는 것입니다. 스토어드 프로 시저에 쉽게 넣을 수 없습니다. –

-1

SHOW TABLES 쿼리에서 use LIKE or WHERE 수 있습니다.

+0

예, 이것은 사실이다. 나는 'like'를 사용할 수는 있지만 'not like'를 사용할 수 없거나 틀리다. – Katie

관련 문제