Skip to content

Commit 78b9407

Browse files
committed
fix: rimozione record orfani tabelle
1 parent a518118 commit 78b9407

2 files changed

Lines changed: 53 additions & 1 deletion

File tree

update/2_9_2.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
include __DIR__.'/../config.inc.php';
4+
5+
// Ottiene tutte le foreign key con ON DELETE CASCADE
6+
$foreign_keys_query = "
7+
SELECT
8+
kcu.TABLE_NAME,
9+
kcu.COLUMN_NAME,
10+
kcu.REFERENCED_TABLE_NAME,
11+
kcu.REFERENCED_COLUMN_NAME,
12+
kcu.CONSTRAINT_NAME
13+
FROM
14+
information_schema.KEY_COLUMN_USAGE kcu
15+
INNER JOIN
16+
information_schema.REFERENTIAL_CONSTRAINTS rc
17+
ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
18+
AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
19+
WHERE
20+
kcu.CONSTRAINT_SCHEMA = DATABASE()
21+
AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
22+
AND rc.DELETE_RULE = 'CASCADE'
23+
ORDER BY
24+
kcu.TABLE_NAME, kcu.COLUMN_NAME
25+
";
26+
27+
$foreign_keys = $dbo->fetchArray($foreign_keys_query);
28+
29+
// Per ogni foreign key, esegue la pulizia dei record orfani
30+
foreach ($foreign_keys as $fk) {
31+
$table_name = $fk['TABLE_NAME'];
32+
$column_name = $fk['COLUMN_NAME'];
33+
$referenced_table = $fk['REFERENCED_TABLE_NAME'];
34+
$referenced_column = $fk['REFERENCED_COLUMN_NAME'];
35+
36+
// Query per eliminare i record orfani
37+
$delete_query = "
38+
DELETE FROM `{$table_name}`
39+
WHERE `{$column_name}` IS NOT NULL
40+
AND `{$column_name}` NOT IN (
41+
SELECT `{$referenced_column}`
42+
FROM `{$referenced_table}`
43+
)
44+
";
45+
46+
try {
47+
$dbo->query($delete_query);
48+
} catch (Exception $e) {
49+
// Continua con la prossima foreign key in caso di errore
50+
continue;
51+
}
52+
}

update/2_9_2.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ ALTER TABLE `my_impianti_contratti` CHANGE `idcontratto` `idcontratto` INT NOT N
219219
DELETE FROM `my_impianti_contratti` WHERE `idcontratto` NOT IN (SELECT `id` FROM `co_contratti`);
220220
ALTER TABLE `my_impianti_contratti` ADD CONSTRAINT `my_impianti_contratti_ibfk_2` FOREIGN KEY (`idcontratto`) REFERENCES `co_contratti`(`id`) ON DELETE CASCADE;
221221

222-
DELETE FROM `my_impianti_componenti` WHERE `idimpianto` NOT IN (SELECT `id` FROM `my_impianti`);
222+
DELETE FROM `zz_otp_tokens` WHERE `id_utente` NOT IN (SELECT `id` FROM `zz_users`);
223223
ALTER TABLE `zz_otp_tokens` ADD CONSTRAINT `zz_otp_tokens_ibfk_1` FOREIGN KEY (`id_utente`) REFERENCES `zz_users`(`id`) ON DELETE CASCADE;
224224

225225
DELETE FROM `zz_otp_tokens` WHERE `id_module_target` NOT IN (SELECT `id` FROM `zz_modules`);

0 commit comments

Comments
 (0)