Saltar al contenido

consulta mySQL para buscar en todas las tablas dentro de una base de datos para un string?

Posteriormente a consultar con expertos en el tema, programadores de diversas áreas y maestros hemos dado con la solución al problema y la dejamos plasmada en esta publicación.

Solución:

Si estás usando Banco de trabajo MySQLpuede hacer esto haciendo clic con el botón derecho en el esquema de base de datos que desea buscar y luego “Buscar datos de tabla…“.

Allí puede seleccionar el “Buscar usando REXEXP“, y luego escriba su texto de búsqueda como de costumbre. Proporcionará las filas de la base de datos que coincidan con su texto específico.

Tendrá que comprobar el “Columnas de búsqueda de todo tipo” caja también.

Alternativamente, si su base de datos no es tan grande, puede hacer un volcado y hacer su búsqueda en el archivo .sql generado.

Si quieres hacerlo puramente en MySQL, sin la ayuda de ningún lenguaje de programación, puedes usar esto:

## Table for storing resultant output

CREATE TABLE `temp_details` (
 `t_schema` varchar(45) NOT NULL,
 `t_table` varchar(45) NOT NULL,
 `t_field` varchar(45) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

## Procedure for search in all fields of all databases
DELIMITER $$
#Script to loop through all tables using Information_Schema
DROP PROCEDURE IF EXISTS get_table $$
CREATE PROCEDURE get_table(in_search varchar(50))
 READS SQL DATA
BEGIN
 DECLARE trunc_cmd VARCHAR(50);
 DECLARE search_string VARCHAR(250);

 DECLARE db,tbl,clmn CHAR(50);
 DECLARE done INT DEFAULT 0;
 DECLARE COUNTER INT;

 DECLARE table_cur CURSOR FOR
 SELECT concat('SELECT COUNT(*) INTO @CNT_VALUE FROM `',table_schema,'`.`',table_name,'` WHERE `', column_name,'` REGEXP ''',in_search,''';')
 ,table_schema,table_name,column_name
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA NOT IN ('information_schema','test','mysql');

 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

 #Truncating table for refill the data for new search.
 PREPARE trunc_cmd FROM "TRUNCATE TABLE temp_details;";
 EXECUTE trunc_cmd ;

 OPEN table_cur;
 table_loop:LOOP
 FETCH table_cur INTO search_string,db,tbl,clmn;

 #Executing the search
 SET @search_string = search_string;
 SELECT search_string;
 PREPARE search_string FROM @search_string;
 EXECUTE search_string;


 SET COUNTER = @CNT_VALUE;
 SELECT COUNTER;

 IF COUNTER>0 THEN
 # Inserting required results from search to table
 INSERT INTO temp_details VALUES(db,tbl,clmn);
 END IF;

 IF done=1 THEN
 LEAVE table_loop;
 END IF;
 END LOOP;
 CLOSE table_cur;

 #Finally Show Results
 SELECT * FROM temp_details;
END $$
DELIMITER ;

Fuente: http://forge.mysql.com/tools/tool.php?id=232

valoraciones y comentarios

Si tienes algún titubeo y disposición de progresar nuestro crónica eres capaz de realizar una glosa y con deseo lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *