Kann man Arrays in einer MySQL speichern

Diskutiere mit über: Kann man Arrays in einer MySQL speichern im Datenbanksysteme für das Web Forum

  1. Der_Jan

    Der_Jan Thread Starter MacUser Mitglied

    Beiträge:
    606
    Zustimmungen:
    7
    Registriert seit:
    06.01.2004
    Guten Morgen,
    ich wage die ersten Schritte mit "Arrays" und habe eine triviale Frage:
    Kann man Arrays als ganzes in ein Feld einer MySQL speichern? Oder muss ich erst alle Daten aus dem Array rausholen und einzeln abspeichern?

    Mit der Bitte um Erleuchtung ;)
    Der Jan
     
  2. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    Da stellt sich nat. zunächst mal die Frage womit ;)

    grundsätzlich lassen sich in vielen Sprachen Array serialisieren. Das heißt aus einem Array wird einfach ein langer String gemacht, der Inhalt und Struktur des Arrays enthält. Man braucht dann den String nur in einer DB als varchar oder BLOB zu speichern und gut ist's.
    Das auslesen erflogt umgekehrt als Zeichenkette, die dann per deserialisierung einem Array bei Initialisierung übergeben wird und man hat wieder ein Array aus der DB gelesen.

    Je nach Zahl der Spalten ( und ihrer Bedeutung), mag es aber ggf. auch sinnvoller sein die "Array-Spalten" benannten DB-Spalten zuzuordnen und die Werte jeweils extra abzulegen.
     
  3. Der_Jan

    Der_Jan Thread Starter MacUser Mitglied

    Beiträge:
    606
    Zustimmungen:
    7
    Registriert seit:
    06.01.2004
    Oha, ich hätte PHP erwähnen sollen ;)

    Was darf ich mir unter "serialisieren" vorstellen?

    Ich hatte es mir wie folgt gedacht...

    PHP:
    <?
    include (
    "inc/connect.inc.php");  
    $id='11';
    $staedte=array("hamburg","berlin","stuttgart","wien");
    mysql_db_query("$db","insert into europa (id,staedte) values ('$id','$staedte')");  

    // Nun ist das Array in der Datenbank drinnen
    // Und jetzt das Array wieder abfragen

    $result=mysql_query("select staedte from europa WHERE id='11'"); 
    if(
    $result)
        {
        while (
    $s=mysql_fetch_array($result))
            {
            
    $staedte=$s['staedte'];
    echo 
    implode("-",$staedte);

    // Hier hätte ich nun gerne die Ausgabe "hamburg-berlin-stuttgart-wien", nur klappen will es nicht
    }
    }
    ?>
    BTW, gibt es eigentlich einen Editor, der php ordentlich einrücken kann?
    Gruß
    Der Jan
     
  4. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    die gut geführte PHP-Doku hilft Dir bei so etwas gern:

    http://de3.php.net/manual/de/function.serialize.php

    Gruß wegus
     
  5. stoph

    stoph MacUser Mitglied

    Beiträge:
    134
    Zustimmungen:
    0
    Registriert seit:
    20.02.2006
  6. koli.bri

    koli.bri Gast

    Jetzt natürlich auch die Frage, wozu das ganze. Denn vielleicht wäre es auch einfacher, und sinnvoller für die Werte, die in das Array kommen, eine neue Tabelle anzulegen...

    Aber "serialize" kannte ich auch noch nicht. Interessant.

    PS.: Theoriethis geht das auch mit einem implode und Explode, wobei das Trennzeichen dann so zu wählen ist, dass es in den Strings, die gespeichert werden nicht vorkommt. Und die Indexe gehen verloren

    gruß
    Lukas
     
  7. Der_Jan

    Der_Jan Thread Starter MacUser Mitglied

    Beiträge:
    606
    Zustimmungen:
    7
    Registriert seit:
    06.01.2004
    Okay, aber wie bringt man das Programm zum laufen? Muss da noch kompiliert werden?
     
  8. Der_Jan

    Der_Jan Thread Starter MacUser Mitglied

    Beiträge:
    606
    Zustimmungen:
    7
    Registriert seit:
    06.01.2004
    In dem Array wollte ich die Rubriken abspeichern, die ein User nutzen darf (z.b. $user_rights="redsys","forum","voting"). Entsprechend der Arrayeinträge dann die Navigation ausgeben lassen. Dachte mir, dass ein Array schnell und schlanker arbeitet als eine komplette Tabellenabfrage. Weshalb denkst du, ich sollte lieber eine neue Tabelle anlegen?

    Gruß
    Der Jan

    P.S.: Gibt es eigentlich eine maximale Anzahl an Session-Variablen die man einhalte sollte, um keine Systemprobleme zu bekommen?
     
    Zuletzt bearbeitet: 29.03.2006
  9. koli.bri

    koli.bri Gast

    Ach so...
    Hm, dafür würd hätt ich mir jetzt irgendwas kompliziertes gebastelt, wie die funktion error_reporting mit ihren Parametern...

    Ne, Spatz beiseite, ich weiß jetzt zwar nicht, was Du für ein Projekt hast, aber vielleicht ist folgendes auch eine Überlegung wert:

    Eine Extra-Rechtetabelle. Dort wird die ID des Rechteprofils gespeichert (ist ja klar), und die verschiedenen Möglichkeiten, die man machen kann als BOOL-Werte

    Beispiel:
    ID -> ID des Profils:
    passwort_aendern -> 1 = Darf Passwort ändern / 0 = Darf Passwort nicht ändern
    Beitraege_schreiben -> 1 = Darf Beiträge schreiben / 0 = Darf keine Beiträge schreiben
    Admin_bereich -> 1 = Darf in den Admin-Bereich / 0 = Darf nicht in den Atminbereich

    Im PHP-Script wird dann vor den entsprechenden Funktionen abgefragt, ob der Benutzer die entsprechenden Rechte hat.
    Das hätte doch den Vorteil, dass man die Rechte recht einfach verwalten kann (Anhand von Profilen), man kann schnell Profile hinzufügen, ohne jetzt bei allen Usern das gespeicherte Array neu einzulesen.
    Falls den Usern was verboten/erlaubt werden soll, muss man nicht alles gespeicherten Arrays auslesen und wieder wegspeichern...
    Falls neue "Berechtigungsarten" hinzukommen, kann man die Tabelle einfach erweitern
    (Wie zum Beispeil eine neu hinzukommende Galerie, für die nicht alle eine Berechtigung bekommen)

    Dafür dann einmal eine Funktion geschrieben, die eine Array mit den REchten zurückgibt, und das wars...

    Von der Performance, keine Ahnung. SQL ist recht schnell, auch wennich gerade von MySQL gehört habe, dass es nicht so flott ist. Aber es gibt eh nur eine wahre alternative zu SQL: RPG-Zyklusprogramme!!! (sagt zumindest der Chef ^^)

    Aber dash ab ich mir jetzt auch innerhalb von fünf Minuten ausgedacht, wird wohl noch bessere Möglichkeiten dafür geben...


    Aber da wird wohl jeder seine eigene Idee haben, falsch ist die Idee nicht. und blöd auch nicht.

    gruß
    Lukas
     
  10. koli.bri

    koli.bri Gast

    Ach so, zu den Sessions: Das kommt auf den Server an. in irgendeinem Tutorial hab ich da, glaube ich, mal Richtwerte gelesen. Die hab ich aber wieder vergessen, weil sie unwichtig wahren, ich würde mir da keine Sorgen machen, wenn du cnith gerade versucht ein Forum wie dieses hier privat auf einem kleinem Rechner zu hosten...
     
Die Seite wird geladen...
Ähnliche Themen - Kann Arrays einer Forum Datum
SQL: Nächstgelegenes Datum aus einer Gruppe ermitteln Datenbanksysteme für das Web 09.10.2014
MAMP/Safari kann keine Verbindung zum server localhost herstellen Datenbanksysteme für das Web 09.07.2014
MySQL: Kann mich nicht anmelden Datenbanksysteme für das Web 18.02.2010
Wie kann ich Shop-Suche beschränken?? Datenbanksysteme für das Web 14.01.2010
Zwei Tabellen zu einer View zusammenfügen Datenbanksysteme für das Web 03.11.2008

Diese Seite empfehlen

Benutzerdefinierte Suche