2010-12-13 16 views
5

Qualcuno potrebbe aiutarmi con questo problema mysql? Sto cercando di ottenere il nome di tutte le tabelle da un db.nome tabelle corrispondenti con tabelle mostra

Nel mio db ho tavoli come:

_table1, _table2, table3, Table4, table5_xrefs

ma voglio ottenere solo i tavoli senza _ all'inizio e senza _xref a fine. Quindi in questo esempio ho bisogno solo di table3 e table4.

Sto usando show tables per mostrare il nome di tutte le tabelle e dopo che sto usando php per abbinare il nome corretto della tabella. Mi stavo chiedendo se potevo fare lo stesso usando solo una query mysql.

risposta

33

È possibile ma è necessario sapere che il nome della colonna restituito dalla query SHOW TABLES è la concatenazione della stringa tables_in_ e il nome del database. Quindi sarebbe simile a questa, per il database test:

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

ma preferirei usare information_schema database per ottenere queste informazioni:

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

Grazie mille. Mi sono reso conto che la prima query è più veloce della seconda? Perché preferisci usare quello? – Katie

+0

Principalmente per coerenza, sto utilizzando information_schema per ottenere molte più informazioni su tabelle e campi nelle mie applicazioni. La seconda ragione è che non mi piace avere una variabile nei nomi delle colonne - non può essere facilmente inserita nella stored procedure. –

-1

È possibile eseguire use LIKE or WHERE nelle domande SHOW TABLES.

+0

Sì, questo è vero. Posso usare 'mi piace' ma non posso usare 'non mi piace' o ho torto – Katie