Jak najít "nějaký text" ve všech databázích na serveru.
SELECT CONCAT('SELECT * FROM ', TABLE_SCHEMA, '.', TABLE_NAME,
' WHERE ', COLUMN_NAME, ' LIKE '%nějaký text%';')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA != 'mysql' AND TABLE_SCHEMA != 'performance_schema'
AND TABLE_SCHEMA != 'innodb' AND TABLE_SCHEMA != 'information_schema';
Vypíše seznam SQL dotazů pro všechny možnosti.
V ideálním případě stačí zkopírovat dotazy.
Pokud jich je mnoho a chceme dotazy pouze pro některou z databází, vyexportujeme výsledek například ve formátu CSV pro Excel a použijeme pouze řádky pro danou databázi.
SQL dotazy zkopírujeme do phpMyAdminu (vložit SQL dotaz).
Popřípadě můžeme vytvořit funkci pro hledání.
DROP PROCEDURE IF EXISTS findAll;
CREATE PROCEDURE `findAll`( IN `tableName` VARCHAR( 28 ) , IN `search` TEXT )
BEGIN
DECLARE finished INT DEFAULT FALSE ;
DECLARE columnName VARCHAR ( 28 ) ;
DECLARE stmtFields TEXT ;
DECLARE columnNames CURSOR FOR
SELECT DISTINCT `COLUMN_NAME` FROM `information_schema`.`COLUMNS`
WHERE `TABLE_NAME` = tableName ORDER BY `ORDINAL_POSITION` ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
SET stmtFields = '' ;
OPEN columnNames ;
readColumns: LOOP
FETCH columnNames INTO columnName ;
IF finished THEN
LEAVE readColumns ;
END IF;
SET stmtFields = CONCAT(
stmtFields , IF ( LENGTH( stmtFields ) > 0 , ' OR' , '' ) ,
' `', tableName ,'`.`' , columnName , '` REGEXP "' , search , '"'
) ;
END LOOP;
SET @stmtQuery := CONCAT ( 'SELECT * FROM `' , tableName , '` WHERE ' , stmtFields ) ;
PREPARE stmt FROM @stmtQuery ;
EXECUTE stmt ;
CLOSE columnNames ;
END;