2012-10-23 3 views
1

Est-il possible qu'une instruction mysql sélectionne un champ de n'importe quelle table? par exemple: SELECT * FROM * WHERE ? IN (SELECT * FROM *) pour implémenter une méthode de recherche générique qui ne dépend pas d'une table ou d'un champ spécifique. Je viens de lire que nous pouvons lister toutes les tables d'une base de données avec une commande SQL: SHOW TABLES Avez-vous une idée de comment pouvons-nous faire cela? Merci :)Sélectionner un champ de n'importe quelle table

+0

-t-il doit être seulement en SQL ou vous pouvez utiliser quelque chose comme PHP? – Marc

+0

Ceci est couvert dans ce post, il existe plusieurs solutions. http://stackoverflow.com/questions/562457/search-for-all-occurrences-of-a-string-in-a-mysql-database – mikeswright49

+0

Merci @Marc :) Non, ça peut être en PHP (mais seulement en PHP parce que je travaille avec) – Copernic

Répondre

1

Vous pouvez essayer quelque chose comme ça en php

$getTables = mysql_query("show tables"); 
$tmpString = ''; 
while ($table_data = mysql_fetch_row($getTables)) 
{ 
    $tmpString.=$table_data[0].','; 
} 
$ALL_DATABASE_TABLES = substr($string,0,strlen($tmpString)-1); //Remove the last , 

Alors tu as toutes vos tables et vous pouvez construire votre requête

comme celui-ci

$qry = "SELECT * FROM $ALL_DATABASE_TABLES" 
+0

Merci. c'est parfait !! – Copernic

+0

En fait, ce n'est pas un moyen élégant mais ça marchera;) Content d'aider – Marc

+0

Je vais l'utiliser en cherchant une meilleure façon de le faire :) – Copernic

0

Créez une procédure et utilisez un mécanisme de requête dynamique, par ex. ci-dessous:

CREATE PROCEDURE dynamicQuery() 
    BEGIN 
    SET @tableName := 'TABLENAME1'; 
    SET @SqlStr = 'SELECT * FROM @tableName'; 
    PREPARE n_StrSQL FROM @SqlStr; 
    EXECUTE n_StrSQL; 
    DEALLOCATE PREPARE n_StrSQL; 
END 
+0

Merci :) mais c'est comme si je fais: 'SELECT * FROM table1, table2, ...., table200 O WH? IN (SELECT * FROM table1, table2, ...., table200), n'est-ce pas? – Copernic

+0

@Mehdi: Non, c'est comme exécuter 'select * from Table1' ou' select * from Table2'. Tout ce que je voulais dire, c'est que vous pouvez construire une requête dynamique en chantant des variables et les exécuter. C'est à vous de décider quelle requête vous voulez construire. –

Questions connexes