2010-12-13 27 views
5

Birisi bana bu mysql sorununu yardımcı olabilir mi? Tüm tabloların adını bir db'den almaya çalışıyorum. En başında ve _xref olmadan _Eşleşen tabloları göster tabloları ile gösterme adı

_table1, _table2, Tablo3, Tablo 4, table5_xrefs

ama olmadan sadece tabloları almak istiyorum: benim db içinde

ben gibi tablolar son. Yani bu örnekte sadece tablo3 ve tablo4'e ihtiyacım var.

Tüm tablo adlarını ve doğru tablo adını eşleştirmek için php kullanıyorum sonra show tables kullanıyorum. Sadece bir mysql sorgusu kullanarak aynı şeyi yapıp yapamayacağımı merak ediyordum.

cevap

33

Bu, SHOW TABLES sorgusundan döndürülen sütun adının, tables_in_ dizesinin ve veritabanı adınızın birleşimidir.

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

Ama bu bilgi almak için information_schema veritabanını kullanmayı tercih ediyorum: Yani veritabanında test için, şu şekilde görünür

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

Çok teşekkürler. İlk sorgunun ikincisinden daha hızlı olduğunu fark ettim? Bunu neden kullanmayı tercih ediyorsunuz? – Katie

+0

Özellikle tutarlılık için, uygulamalarda tablo ve alanlar hakkında daha fazla bilgi almak için information_schema kullanıyorum. İkinci sebep ise, sütun isminde değişkenden hoşlanmamamdır - saklı yordama kolayca konamaz. –

-1

SHOW TABLES sorgularında use LIKE or WHERE yapabilirsiniz.

+0

Evet, bu doğrudur. 'Beğen' kullanabilirim ama 'beğenmeyeceğim' kullanamıyorum ya da yanılıyor – Katie