これらの手順により、処理時間を大幅に短縮できますが、予想よりも少し余分な労力がかかる可能性があります.
仮定して :
- 変数 $qry には、結果を変数 $q に格納するクエリが含まれます
- 以下のように3つのテーブルがあります
- あなたの例で $q によって使用されるクエリを実行し、table_1、table_2、最後に table_3 から順番に開始します
テーブル table_1 :
id | col_timestamp | parent_table | parent_id
---------------------------------------------
1 | 1374531523.343| NULL | NULL
テーブル table_2 :
id | col_timestamp | parent_table | parent_id
---------------------------------------------
1 | 1374531520.444| NULL | NULL
2 | 1374531524.012| table_1 | 1
3 | 1374531556.012| NULL | 1
4 | 1374531556.512| table_2 | 3
テーブル table_3 :
id | col_timestamp | parent_table | parent_id
---------------------------------------------
1 | 1374531521.111| table_2 | 1
2 | 1374531523.111| table_1 | 1
説明 : フィールド parent_table は、現在の行が table_1、table_2、または table_3 を参照していることを示す varchar です。フィールドparent_idは、フィールドparent_tableが指すテーブルのフィールドidを参照しています。
ここで、ユーザーがすべてのテーブルに挿入するたびに、同様のイベントがデータベースに既に存在するかどうかを確認する必要があります。トリガーを使用してこれを行うことができます。このトリガーは、行が table_2 に挿入されるたびに起動されます。
DELIMITER $$
USE `your_database`$$
DROP TRIGGER /*!50032 IF EXISTS */ `before_insert_table_2`$$
CREATE TRIGGER `before_insert_table_2` BEFORE INSERT
ON `table_2` FOR EACH ROW
BEGIN
DECLARE var_id INTEGER ;
DECLARE var_table VARCHAR (10) ;
SELECT id, parent_table INTO var_id, var_table
FROM
( SELECT id, 'table_1' AS parent_table, col_timestamp
FROM table_1
WHERE parent_id IS NULL
AND col_timestamp BETWEEN NEW.col_timestamp - 1 AND NEW.col_timestamp + 1
UNION
SELECT id, 'table_2' AS parent_table, col_timestamp
FROM table_2
WHERE parent_id IS NULL
AND col_timestamp BETWEEN NEW.col_timestamp - 1 AND NEW.col_timestamp + 1
)
ORDER BY ABS(col_timestamp - NEW.col_timestamp), parent_table
LIMIT 1 ;
SET NEW.parent_id = var_id ;
SET NEW.parent_table = var_table ;
END ;
$$
DELIMITER ;
table_1 と table_3 に対して同様の手順を実行します。
次のステップは、parent_table と parent_id を既存のデータに設定することです。$qry を変更して、テーブル名とその ID を取得し、関連する行に更新することができます。このステップは 1 回だけ実行する必要があります。
次のステップは、クエリを変更してイベントを取得することです。これは例です:
SELECT 'table_1' original_table, id
FROM table_1
WHERE parent_id IS NULL
UNION
SELECT 'table_2' original_table, id
FROM table_2
WHERE parent_id IS NULL
UNION
SELECT 'table_3' original_table, id
FROM table_3
WHERE parent_id IS NULL
最後のステップは、プログラムを変更してデータベースの変更を実装することです。
うまくいけば、この助け。