Array in mySQL-Datenbank unserializen und durchsuchen
Paco
- php
Hallo allerseits!
Ich bastel an einem kleinen Projektverwaltungstool, dabei werden verschiedene Benutzer verschiedenen Projekten zugewiesen. Ich habe das bisher prinzipell folgendermaßen realisiert:
Ich habe eine Tabelle (dispo) mit den Feldern Projektname, technik, Grafik und eine andere Tabelle mit angelegten Benutzern. Weise ich jetzt beispielsweise mehrere Benutzer dem Bereich technik von Projekt1 zu, so schreibe ich diese alle in ein array, serialize das und schreibe es in die Datenbank.
Soweit funktioniert alles gut und die Ausgabe mache ich mittels
while ($link = mysql_fetch_object($sql)) {
$id = $link->id;
$projekt = htmlentities($link -> projekt, ENT_QUOTES, 'UTF-8');
$technik_arr = unserialize(($link -> technik));
$grafik_arr = unserialize(($link -> grafik));
echo '<td>' . $projekt . '</td>';
echo '<td>' . $technik_arr[0] . '<br />' . $technik_arr[1] . '<br />' . $technik_arr[2] . '<br />' . $technik_arr[3];
echo '<td>' . $grafik_arr[0] . '<br />' . $grafik_arr[1] . '<br />' . $grafik_arr[2] . '<br />' . $grafik_arr[3];
So weit so gut, außer natürlich, daß die Anzahl der Array-Felder undynamisch ist, aber das ist jetzt erstmal nicht so schlimm.
Jetzt möchte ich aber das ganze andersrum sortieren. Also nach Benutzer sortiert ausgeben, in welchem Projekt derjenige involviert ist.
Habe gerade einen furchtbaren Knoten im Hirn, wie das hinbekomme in einer Schleife die Arrays nach einem Benutzernamen zu durchsuchen und das jeweilige Projekt auszugeben, noch dazu wo ich die komplette Liste aller möglichen Benutzer ja aus einer anderen Tabelle beziehe.
Ist meine Herangehensweise mit den Arrays eine ziemlich ungeschickte welche? Hat jemand einen kleinen Gedankenanschubs für mich oder eine alternative Herangehensweise?
Wäre extrem dankbar,
Paco
Hallo,
Ich habe eine Tabelle (dispo) mit den Feldern Projektname, technik, Grafik und eine andere Tabelle mit angelegten Benutzern. Weise ich jetzt beispielsweise mehrere Benutzer dem Bereich technik von Projekt1 zu, so schreibe ich diese alle in ein array, serialize das und schreibe es in die Datenbank.
warum verwendest Du überhaupt ein relationales Datenbankmanagementsystem?
Soweit funktioniert alles gut und die Ausgabe mache ich mittels
[...]
Jetzt möchte ich aber das ganze andersrum sortieren. Also nach Benutzer sortiert ausgeben, in welchem Projekt derjenige involviert ist.
sowas gibt Dein [...] (zensiert) Datenbankdesign nicht her. Mit einer normalen n-m-Beziehung und drei Tabellen kriegst Du das kinderleicht mit SQL:
SELECT
b.benutzer,
p.projekt
FROM
projekte p
INNER JOIN
projekt_mitarbeiter pm
ON
<geeignete Join-Bedingung>
INNER JOIN
benutzer b
ON
<geeignete Join-Bedingung>
ORDER BY
b.benutzer,
p.projekt
Ist meine Herangehensweise mit den Arrays eine ziemlich ungeschickte welche?
Ich kann mir nur wenig schlimmeres vorstellen.
Hat jemand einen kleinen Gedankenanschubs für mich oder eine alternative Herangehensweise?
eine angemessene Datenmodellierung sollte zu den nötigen Tabellenstrukturen führen. Der Wikipedia-Artikel Normalisierung (Datenbank) könnte Dir dabei als Ausgangspunkt dienen, zu lernen, wie man mit relationalen Datenbankmanagementsystemen sinnvoll umgeht.
Freundliche Grüße
Vinzenz