Hallo,
und schon wieder stehe ich vor einem kleinen Problem.
Ich programmiere gerade ein kleines Backup-System für den Eigengebrauch und habe dort nun folgende Datenbankstruktur erstellt:
Tabelle 1: global_backups
Hier sind allgemeine Informationen zu den Backups enthalten
backup_id|datetime|...
1|2012-01-20 12:15:23|...
2|2012-01-19 15:24:26|...
Tabelle 2: global_backups_kinds
Hier sind die Backup-Arten zu den Backups gespeichert (MySQL oder FTP)
backup_id|kind
1|mysql
2|mysql
2|ftp
Tabelle 3: global_backups_projects
Hier sind die Projekte gespeichert die in den einzelnen Backups gespeichert sind
backup_id|project_name
1|Projekt 1
2|Projekt 1
2|Projekt 2
Aus diesen Tabellen brauche ich nun ein Array, das wie folgt aussieht:
Da ich hierfür per MySQL leider keine direkte Lösung gefunden habe, baue ich mir dieses nun per PHP zusammen:
Soweit so gut, nun führt diese Vorgehensweise allerdings zu einigen Problemen:
Problem 1:
Eine Blätterfunktion um die Einträge auf mehrere Seiten zu verteilen ist mit MySQL und LIMIT x, y nun nicht mehr möglich, da ich nicht weiß, welche Datenreihen zusammengehören, bevor ich das PHP-Script drüberlaufen gelassen habe. Ich müsste also generell alle Backups auslesen und dann mit PHP auf die verschiedenen Seiten verteilen.
Problem 2:
Eine Suchfunktion, die nach einzelnen Projekten sucht und dennoch alle in diesen Backups enthaltene Projekte ausgibt ist nun auch nicht mehr möglich, denn wenn ich eine WHERE `project_name` IN (...) einfüge, erhalte ich ja logischerweise auch im Result nur die Daten, nach denen ich gesucht habe und nicht mehr die anderen Daten. für eine derartige Suchfunktion müsste ich also auch wieder alle Daten auslesen und dann mit PHP diese Daten durchsuchen.
In der Hoffnung, nicht bereits alle mit dem ganzen Text abgeschreckt zu haben: Gibt es hierfür vielleicht eine intelligentere Lösung mit MySQL?
Vielen Dank im Vorraus.
mfg
Gsus
und schon wieder stehe ich vor einem kleinen Problem.
Ich programmiere gerade ein kleines Backup-System für den Eigengebrauch und habe dort nun folgende Datenbankstruktur erstellt:
Tabelle 1: global_backups
Hier sind allgemeine Informationen zu den Backups enthalten
1|2012-01-20 12:15:23|...
2|2012-01-19 15:24:26|...
Tabelle 2: global_backups_kinds
Hier sind die Backup-Arten zu den Backups gespeichert (MySQL oder FTP)
1|mysql
2|mysql
2|ftp
Tabelle 3: global_backups_projects
Hier sind die Projekte gespeichert die in den einzelnen Backups gespeichert sind
1|Projekt 1
2|Projekt 1
2|Projekt 2
Aus diesen Tabellen brauche ich nun ein Array, das wie folgt aussieht:
PHP:
array("backup_id" => [ID],
"datetime" => [datetime],
"kind" => array([0 => ftp],
[1 => mysql]),
"projects" => array([0 => "Projekt 1"],
[1 => "Projekt 2"])
)
Da ich hierfür per MySQL leider keine direkte Lösung gefunden habe, baue ich mir dieses nun per PHP zusammen:
PHP:
$result = $mysql->query("SELECT `backup_id`, DATE_FORMAT(`datetime`, '%%d.%%m.%%Y %%H:%%i:%%s') AS `datetime`, `kind`, `project_name` FROM `global_backups` LEFT JOIN `global_backups_kinds` USING(`backup_id`) LEFT JOIN `global_backups_projects` USING (`backup_id`) WHERE `project_name` ORDER BY `datetime` DESC");
while($row = mysql_fetch_assoc($result)) {
if(!isset($backups[$row['backup_id']])) {
$row['color'] = ($i%2==0)?"dark":"light";
$row['kind'] = array($row['kind']);
$row['project_name'] = array($row['project_name']);
$backups[$row['backup_id']] = $row;
$i++;
} else {
if(!in_array($row['kind'], $backups[$row['backup_id']]['kind'])) $backups[$row['backup_id']]['kind'][] = $row['kind'];
if(!in_array($row['project_name'], $backups[$row['backup_id']]['project_name'])) $backups[$row['backup_id']]['project_name'][] = $row['project_name'];
}
}
Soweit so gut, nun führt diese Vorgehensweise allerdings zu einigen Problemen:
Problem 1:
Eine Blätterfunktion um die Einträge auf mehrere Seiten zu verteilen ist mit MySQL und LIMIT x, y nun nicht mehr möglich, da ich nicht weiß, welche Datenreihen zusammengehören, bevor ich das PHP-Script drüberlaufen gelassen habe. Ich müsste also generell alle Backups auslesen und dann mit PHP auf die verschiedenen Seiten verteilen.
Problem 2:
Eine Suchfunktion, die nach einzelnen Projekten sucht und dennoch alle in diesen Backups enthaltene Projekte ausgibt ist nun auch nicht mehr möglich, denn wenn ich eine WHERE `project_name` IN (...) einfüge, erhalte ich ja logischerweise auch im Result nur die Daten, nach denen ich gesucht habe und nicht mehr die anderen Daten. für eine derartige Suchfunktion müsste ich also auch wieder alle Daten auslesen und dann mit PHP diese Daten durchsuchen.
In der Hoffnung, nicht bereits alle mit dem ganzen Text abgeschreckt zu haben: Gibt es hierfür vielleicht eine intelligentere Lösung mit MySQL?
Vielen Dank im Vorraus.
mfg
Gsus