Benne: DBI, sortierte Hashes

Hallo,

ich benutze das DBI Modul, um Datenbankabfragen zu verarbeiten.
Dazu lasse ich mir mit $dbh->selectall_hashref(...) eine Hashreferenz auf das Ergebnis zurückgeben.

Jetzt das Problem:
Erstelle ich eine sortierte Abfrage kommt die Sortierung in Perl wieder durcheinander, da DBI intern Standard-Perl Hashes verwendet.

Gibt es eine gute Möglichkeit wie man dieses Problem umgehen kann?

Danke und Gruß,
Benne

  1. Hallo,

    ich persönlich benutze eigentlich immer fetchrow_hashref, und verarbeite es in einer schleife.
      warum sollte ich alles holen, wenn ich es doch später eh wieder nur einzeln verarbeiten kann (bzw. ist mir noch nichts begegnet, wo ich es so machen würde)?!

    gruss

    --
    no strict;
    no warnings;
    Ich weiss es nicht, aber ich bin mir nicht sicher.
    Craptastic.
    Wenn ich groß bin, werde ich eine nervige künstliche Intelligenz.
  2. Jetzt das Problem:
    Erstelle ich eine sortierte Abfrage kommt die Sortierung in Perl wieder durcheinander, da DBI intern Standard-Perl Hashes verwendet.

    Was meinst du damit?
    Wenn die DB Abfrage sortiert ist, werden die Datensätze auch sortiert zurückgegeben. Da wird ncihts durcheinander gemacht.

    Struppi.

    1. Was meinst du damit?

      Jaja, ich hab's übersehen, selectall verwende ich zu selten, da ich mir ein DB::objekt gebastelt habe das ich i.d.R. benutze.

      Struppi.

      1. Hallo,

        Jaja, ich hab's übersehen, selectall verwende ich zu selten, da ich mir ein DB::objekt gebastelt habe das ich i.d.R. benutze.

        steht dieses Objekt auch der Öffentlichkeit zur Verfügung? ;-)

        Ich bastel nämlich auch gerade etwas in Richtung DBI zusammen.

        Greez,
        opi

        --
        Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
  3. Tag Benne.

    Erstelle ich eine sortierte Abfrage kommt die Sortierung in Perl wieder durcheinander, da DBI intern Standard-Perl Hashes verwendet.

    Tja, das ist das "Gewürzregal-Prinzip" :-)
    Entweder du lässt das Sortieren in der Abfrage weg und sortierst den Hash innerhalb deines Scriptes nach deinen Wünschen oder du nimmst gleich selectall_arrayref.

    Siechfred

    --
    Früh übt sich ... (74kB)
    Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
    1. Tag.

      Warum bekommt man eigentlich ein "nicht hilfreich" ohne korrigiert zu werden?

      Tja, das ist das "Gewürzregal-Prinzip" :-)
      Entweder du lässt das Sortieren in der Abfrage weg und sortierst den Hash innerhalb deines Scriptes nach deinen Wünschen oder du nimmst gleich selectall_arrayref.

      Dann eben nochmal ausführlicher:

      Ein Hash funktioniert wie ein Gewürzregal, jeder, der selber kocht, wird das nachvollziehen können. Jeder Hash-Eintrag ist eine Gewürzdose, die Dosen stehen immer so im Regal, wie es in dem Moment gerade sinnvoll war (abhängig davon, welche Gewürze man gerade gebraucht hat, welches man zuerst wieder reingestellt hat usw.). Eine unveränderliche Reihenfolge (z.B. alphabetische Sortierung) ist unnötig, weil der Koch immer das Gewürz "xy" sucht, nicht aber Gewürz Nummer n. Deshalb erscheint mir selectall_hashref in Verbindung mit einer ORDER-BY-Klausel ziemlich sinnlos, weil die Daten zwar sortiert ankommen, es aber nicht feststeht, dass Perl sie auch in genau dieser Reihenfolge im Hash ablegt. Anders wäre es bei selectall_arrayref, denn hier werden die Ergebnisse genau in der Reihenfolge im Array abgelegt, wie sie die Abfrage als Ergebnis liefert.

      Ich weiß, dass der Vergleich hinkt, aber zum Verdeutlichen des Prinzips sollte es allemal ausreichend sein. Sollte ich völlig daneben liegen, dann möge man mich bitte korrigieren.

      Siechfred

      --
      Früh übt sich ... (74kB)
      Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.