0

UserId の特定の番号を検索する必要があるため、データベース内のすべてのテーブルをどのように調べることができますか? X は UserId の例 X = 2 の数値なので、UserId = 2 を見つける必要があります。

MySQL を使用しており、プロシージャを作成したい

私のデータベースのスキーマ:

Something ( ... ) --> without UserId
Something1 (... , UserId,...)
Something2 (... , UserId,...)
Something3 (... , UserId,...)
Cat
Cat1
Cat2
Cat3
Cat4
etc....

番号のないテーブルを PARENT と呼び、番号の例 (Cat1、Cat2... Cat3..) を含むテーブルを CHILDREN と呼びます>

CHILDREN は、1 つのテーブルに 20000 レコードを取得すると動的に作成されます

呼び出し手順の例が必要です: CALL SearchUser(X) where X - UserId の番号

誰かがスクリプトを持っている場合、私は感謝しますまたは誰かが私を助けてくれる場合

4

1 に答える 1

0

これが機能しているかどうかはわかりません。ぜひお試しください。データベース名はここにハードコードされていますWHERE TABLE_SCHEMA IN ('test')

## 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),in_column_name 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 `', in_column_name,'` = "',in_search,'"') ,table_schema,table_name,column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA IN ('test') and column_name=in_column_name ;
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;

END $$
DELIMITER ;

一時テーブルの構造:

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;

呼び出し手順:

call get_table('2','userID');
select * from temp_details;
于 2012-07-26T09:03:12.937 に答える