Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql_query result in array umwandeln

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql_query result in array umwandeln

    Hi alle zusammen!

    Also irgendwie steh ich an.

    mein code ($date1 und $date2 werden vorher per form übergeben)

    Code:
    $result = ("SELECT id FROM table WHERE date1>='$date1' && date2<='date2' && status='ok' ORDER BY id ASC");
    $array = mysql_fetch_array($result);
    zum testen wollt ich jetzt mal einfach folgendes machen:
    Code:
    echo min($array);
    echo max($array);
    echo count($array);
    aber als ergebnis krieg ich bei min($array) und max($array) den gleichen wert raus (nämlich die höchste id, die in der datenbank den status 'ok' hat) und bei count($array) hab ich immer 2.

    wenn ich das ganze DESC sortier, hab ich bei min($array) und max($array) stattdessen den niedrigsten wert ..

    haben möcht ich aber einmal den niedrigsten, einmal den höchsten, und am schluß nen count über alle vorhandenen werte, die meine anforderung (status = 'ok') erfüllen.

    wo liegt da mein denkfehler?

    thx im voraus
    Martin

  • #2
    Code:
    $sql = ("SELECT id FROM table WHERE date1>='$date1' && date2<='date2' && status='ok' ORDER BY id ASC");
    ($sqlResult=mysql_query($sql)) or die ("Fehler beim Zugriff auf die DB".mysql_error());
    $i=-1;
    while($dummy=mysql_fetch_array($sqlResult)){
      $i++;
      $array[$i] = $dummy;
    }
    echo min($array);
    echo max($array);
    echo count($array);
    Versuch mal sowas in der Art (ungetestet), Du bekommst wahrscheinlich nicht nur ein Array geliefert, sondern mehrere, die du dann mysql_fetch_array auslesen musst.

    Kommentar


    • #3
      Also zuerst einmal hast du einen Fehler in deinem SQL-Query! Da fehlt ein Dollar-Zeichen ($) bei der Variable date2

      Dann zu deinem eigentlichen Problem: Wie Toxo schon gesagt hat, gibt dir der Aufruf von mysql_fetch_array() jedesmal nur eine einzige Zeile aus der Datenbank-Tabelle zurück. Wenn du nur die Spalte id auslesen willst, wie du es im Query gemacht hast, dann steht in dem Array ein Index 0 mit der ID und ein Index "ID" mit der ID. Deshalb gibt dir count() 2 zurück. mysql_fetch_array() speichert jeden Wert sowohl in einen String-Index als auch in einem durchnummerierten Index. Um alle Werte zu kriegen, musst du, wie von Toxo erklärt, eine while()-Schleife benutzen! In der while()-Schleife kannst du dir dann selber ein Array zusammenbasteln (ebenfalls von Toxo gemacht), in dem jede ID nur 1x vorkommt, dann geben min(), max() und count() auch das zurück, was du erwartest.

      Kommentar


      • #4
        jo, hab mir schon sowas gedacht, daß eigentlich immer der wert im array überschrieben wird, und somit am schluß nur ein wert drin steht .. und das is je nach ASC oder DESC halt der erste oder letzte wert in der table :-/

        ich dachte, ich kann die schleife irgendwie umgehen, und direkt alle werte in ein array auslesen, aber war wohl wirklich ein denkfehler

        bin aber mittlerweile schon drauf gekommen, daß ich sowieso viel zu kompliziert gedacht hab, und hab jetz ne andere lösung ..
        ich les die werte jetz aus, und geh sie dann mit
        Code:
        for ($i=1; $i<=mysql_num_row($result); $i=$i++) {
        $line = mysql_fetch_assoc($result);
        ...}
        zeile für zeile durch, und setze jeweils die grade aktuelle ($line["id"]) wieder in ne neue mysql_query in eine WHERE-klausel ein, um dort auch mehrere zeilen aus ner anderen table auszulesen die mit ebendieser id verknüpft sind. das klappt super. zwar trotzdem bissi 'von hinten rum' gelöst, aber ich bin noch nicht so warm in php ...

        jedenfalls danke für den tip!! vielleicht test ich das gleich morgen noch auf die schnelle .. is immer gut, mehrere lösungsansätze durchzutesten, um den vernünftigsten (sprich: den mit dem kürzesten code ) zu finden ..

        Kommentar

        Lädt...
        X