2010-12-13 28 views
5

Ai đó có thể giúp tôi với vấn đề mysql này? Tôi đang cố gắng để có được tất cả các tên bảng từ một db.tên bảng phù hợp với bảng hiển thị

Trong db của tôi, tôi có bảng như:

_table1, _table2, table3, table4, table5_xrefs

nhưng tôi muốn để có được chỉ các bảng mà không _ ngay từ đầu và không có _xref tại kết thúc. Vì vậy, trong ví dụ này tôi chỉ cần table3 và table4.

Tôi đang sử dụng show tables để hiển thị tất cả tên bảng và sau khi tôi đang sử dụng php để khớp với tên bảng chính xác. Tôi đã tự hỏi nếu tôi có thể làm tương tự bằng cách sử dụng chỉ là một truy vấn mysql.

Trả lời

33

Có thể nhưng bạn phải biết rằng tên cột được trả lại từ SHOW TABLES truy vấn là nối chuỗi tables_in_ và tên cơ sở dữ liệu của bạn. Vì vậy, nó sẽ trông như thế này, đối với cơ sở dữ liệu test:

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

Nhưng tôi muốn sử dụng cơ sở dữ liệu information_schema để có được thông tin này:

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

Cảm ơn rất nhiều. Tôi nhận ra rằng truy vấn đầu tiên nhanh hơn câu hỏi thứ hai? Tại sao bạn thích sử dụng nó? – Katie

+0

Chủ yếu cho tính nhất quán, tôi đang sử dụng information_schema để nhận được nhiều thông tin hơn về các bảng và các trường trong ứng dụng của tôi. Lý do thứ hai là tôi không thích có biến trong tên cột - nó không thể dễ dàng đưa vào thủ tục được lưu trữ. –

-1

Bạn có thể use LIKE or WHERE trong các truy vấn SHOW BẢNG.

+0

Vâng, điều này là đúng. Tôi có thể sử dụng 'thích' nhưng tôi không thể sử dụng 'không thích' hoặc tôi sai – Katie

Các vấn đề liên quan