Une option peut être d'utiliser une instruction INSERT INTO SELECT. En prenant des suggestions à l'aide des estampilles pour tirer les dernières lignes, vous pouvez faire quelque chose comme ...
INSERT INTO t2 (
SELECT *
FROM t1
WHERE createdts > DATE_SUB(NOW(), INTERVAL 1 HOUR)
);
Cela prendriez toutes les lignes insérées dans l'heure précédente et les insérer dans le tableau 2. Vous pourriez avoir un script exécute cette requête et l'exécute toutes les heures (ou quel que soit l'intervalle dont vous avez besoin).
Ceci simplifierait considérablement votre script PHP pour tirer des lignes car vous n'auriez pas besoin de parcourir toutes les lignes. Il se débarrasse également d'avoir à suivre le dernier identifiant d'insertion.
La solution proposée par Fanis semble aussi intéressante. En tant que note, la requête de sélection dans l'insertion ci-dessus peut seulement être ajustée pour n'insérer que certains champs. Si vous avez seulement besoin de certains champs, vous devez les spécifier dans l'insert comme si ...
INSERT INTO t2 (field1, field2) (
SELECT field1, field2
FROM t1
WHERE createdts > DATE_SUB(NOW(), INTERVAL 1 HOUR)
);
IMO, si possible, quelle que soit la couche que vous utilisez pour insérer, c'est-à-dire les services qui encapsulent les opérations CRUD, vous devez «notifier» votre application après une insertion. De cette façon, vous n'êtes pas constamment en train d'interroger. – Alex
@Alex: Ce sont deux applications indépendantes différentes. La deuxième application lit uniquement à partir de la base de données. – HyderA
Je dirais que le déclencheur AFTER INSERT serait sur place, implémenté au niveau MySQL, et laisserait les scripts interroger et nettoyer les nouvelles entrées dans l'autre table. De cette façon, même forcer un autre identifiant (non-auto-incrémenté) fonctionnerait toujours. – Wrikken