2009-11-14 6 views
0

Je veux sélectionner plusieurs tables avec MySQL. Mais je ne connais pas exactement leur nom, mais ils ont tous la même structure.MySQL: Sélectionnez plusieurs tables

Par exemple:

table_345: 
id || row_1 || row_2 || row_3 

Je veux avoir quelque chose comme ça:

SELECT `id` FROM table_* 

Répondre

3

Si vous utilisez PHP avec votre base de données MySQL, vous pouvez utiliser mysql_list_tables() pour obtenir la liste des tables dans votre base de données. Cette liste peut ensuite être filtrée facilement en utilisant strpos(). Une fois que vous avez votre liste de tables, vous pouvez utiliser SQL UNION pour combiner les ensembles de résultats de vos tables.

J'espère que vous avez vraiment une bonne raison de choisir ce type de design car il pourrait devenir vraiment moche, vraiment rapide.

Bonne chance.

1

En MySQL, vous pouvez utiliser information_schema.TABLES (les noms de tables sont sensibles à la casse dans MySQL) pour récupérer la liste des tables. Vous pouvez ensuite construire une requête dynamique et l'exécuter avec EXECUTE STMT. Voici un exemple:

SET @query = ''; 

SELECT * 
FROM (
    SELECT @query := CONCAT(@query,if(@query = '','',' union all '), 
     'select * from ', T.`TABLE_NAME`) 
    FROM information_schema.TABLES T 
    WHERE TABLE_SCHEMA = 'YourDatabaseName' 
) sub 
WHERE 1=0; 

PREPARE STMT FROM @query; 
EXECUTE STMT; 

P.S. Les instructions multi-lignes comme celle-ci ne fonctionnent pas dans le navigateur de requêtes, mais dans la ligne de commande. Enregistrez les commandes dans un fichier appelé sqlcommands.txt et vous pouvez les exécuter comme:

mysql -u user -p password dbname < sqlcommands.txt 
Questions connexes