#!/usr/bin/env php getPDO(); // Fetch theses with non-empty remarks $rows = $pdo->query( "SELECT id, remarks FROM theses WHERE remarks IS NOT NULL AND remarks != ''" )->fetchAll(); $insertTag = $pdo->prepare('INSERT OR IGNORE INTO tags (name) VALUES (?)'); $getTagId = $pdo->prepare('SELECT id FROM tags WHERE name = ?'); $insertLink = $pdo->prepare('INSERT OR IGNORE INTO thesis_tags (thesis_id, tag_id) VALUES (?, ?)'); $clearRemarks = $pdo->prepare('UPDATE theses SET remarks = NULL WHERE id = ?'); $pdo->beginTransaction(); try { $migrated = 0; foreach ($rows as $row) { $thesisId = (int)$row['id']; $raw = trim($row['remarks']); if ($raw === '') { $clearRemarks->execute([$thesisId]); continue; } $keywords = array_map('trim', explode(',', $raw)); foreach ($keywords as $kw) { $kw = trim($kw); if ($kw === '' || strlen($kw) > 100) continue; // Create tag if needed $insertTag->execute([$kw]); $getTagId->execute([$kw]); $tagId = $getTagId->fetchColumn(); if ($tagId) { $insertLink->execute([$thesisId, (int)$tagId]); } } $clearRemarks->execute([$thesisId]); $migrated++; } $pdo->commit(); echo "Done. Migrated keywords for $migrated theses.\n"; } catch (Throwable $e) { $pdo->rollBack(); echo "Error: " . $e->getMessage() . "\n"; exit(1); }