Viennamade: oder (MySQL): Array oder Resultset transponieren

Hallo!

Das schöne Wort transponieren hab ich aus Excel. Dort kann man aus

aaa                                        abc
bbb     durch Transponieren das machen:    abc
ccc                                        abc

Jetzt erhalte ich aus MySQL ein Recordset und will es in einen PHP-Array einlesen. Aber eben transponiert. Also in der herkömmlichen Vorstellung über Arrays gesprochen sollen die Feldwerte von oben nach unten gehen. Also

Ludwig|Amadeus
Beethoven|Mozart

und nicht

Ludwig|Beethoven
Amadeus|Mozart

Wie mache ich das bitte?

Danke
Viennamade

  1. Hi,

    Wie mache ich das bitte?

    wenn Du _vor_ Absetzung des Statements _exakt_ die Zahl der Datensätze des Resultsets kennst, ist das zumindest denkbar. Es wird aber sehr, sehr hässlich - eine Mischung aus diversen Selfjoins und/oder Subselects.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo!

      Wie mache ich das bitte?

      Es wird aber sehr, sehr hässlich - eine Mischung aus diversen Selfjoins und/oder Subselects.

      Nein, Selfjoins, Subselects mag ich nicht :-)
      Ich hab schon was anderes ... mein Problem war ich weiß nicht wieviele Spalten die Abfrage hat, aber da gibt es sicher eine Abfrage dafür! Die finde ich mir raus.

      Ohne Dein ...

      wenn Du _vor_ Absetzung des Statements _exakt_ die Zahl der Datensätze

      wäre ich nicht draufgekommen - aber was mysql_num_rows kann .. dafür gibt es sicher ein Äquivalent für die Spalten!

      Danke
      Viennamade

      1. Hi,

        Es wird aber sehr, sehr hässlich - eine Mischung aus diversen Selfjoins und/oder Subselects.
        Nein, Selfjoins, Subselects mag ich nicht :-)

        ich sag ja: sehr, sehr hässlich ;-)

        Ich hab schon was anderes ...

        Nämlich?

        mein Problem war ich weiß nicht wieviele Spalten die Abfrage hat,

        Meinst Du _vor_ oder _nach_ der Transponierung? Falls letzteres: Das entspricht dem definitiven Wissen über die Zahl der Zeilen vor der Transponierung. Falls ersteres: Das lässt auf einen Fehler im DB-Layout schließen ...

        was mysql_num_rows kann .. dafür gibt es sicher ein Äquivalent für die Spalten!

        Du möchtest unter gar keinen Umständen im Live-Betrieb "*" selektieren. Du weißt _garantiert_, wie viele Spalten Du selektieren wirst, oder Deine Probleme sind deutlich weitreichender als Du glaubst.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo!

          Ich hab schon was anderes ...
          Nämlich?

          Ähem. Mein Problem war, daß ich nicht wußte wie ich das Resultset einer SELECT-Abfrage so durchlaufe, daß ich von oben nach unten die Datensätze bekomme und innerhalb dieser Datensätze wiederum von oben nach unten die Werte der Felder.

          Also:
          Komponist 1
            Wolfgang
            Mozart
          Komponist 2
            Johann
            Bach

          Wobei die HTML/PHP-Seite für verschiedene Abfragen gelten soll, die Komponisten haben 2 Felder (Vorname, Nachname), die Bildhauer zb. 3 Felder. Dieser Unterschiedlichkeit machte mir die Probleme und so kam ich auf die verrückte Idee des Transponierens, irgendwann aber fand ich die Lösung in
              while(list($key1,$value1)=each($sql_fetch_rows))
          und so funktioniert das jetzt gut.

          Besten Dank nochmals,
          Viennamade

  2. hi,

    aaa
    bbb
    ccc

    das ist schlicht und einfach ein zweidimensionales array.

    deine ergebnisse der DB-abfrage in einem solchen abzulegen, sollte kein problem darstellen.

    anschliessend beim zugriff nur die beiden (nummerischen) indizes vertauschen, und schon hast du das gewünschte.

    gruss,
    wahsaga