mysql_fetch_array() problem

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

  • mysql_fetch_array() problem

    hiho,

    knifflige frage

    was muss ich mit nem array tun um es mit mysql_fetch_array zu verwenden.

    hintergrund:

    ich verwende eine selbstgebaute SQL caching funktion, welche das result array in ne txt file speichert, nun wenn ich das file arslese, bekomme ich ein fertiges array (funktion)
    PHP-Code:
    $result unserialize(implode('',file($file))); 
    nun, was muss ich mit dem array anstellen, das ich da mit mysql_fetch_array arbeiten kann ? (da wird ja normal nur ne ressource ID übergeben.)

    mfg

  • #2
    Re: mysql_fetch_array() problem

    das wird gar nicht gehen, weil mysql_fetch_irgendwas, wie du schon richtig erkannt hast, halt immer eine ressource-id bekommen möchte, und du diese aber nur von der mysql-api bekommst.


    aber wozu brauchst du das denn überhaupt?

    normalerweise sieht eine verarbeitung eines solchen DB-abfrageergebnisses doch so aus,
    PHP-Code:
    while($datensatz mysql_fetch_array($ressource_id))
    {
      
    //tue irgendwas mit datensatz;

    na dann ersetzt du halt diese schleife durch eine leicht abgeänderte, z.b. per foreach.

    PHP-Code:
    foreach($dein_array as $datensatz)
    {
      
    //tue irgendwas mit datensatz;

    dann kann der verarbeitungsteil von $datensatz innerhalb der schleife doch genau der selbe bleiben.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ich verwende eine selbstgebaute SQL caching funktion, welche das result array in ne txt file speichert,
      wozu soll das gut sein? denn die txt file schreiben und auslesen braucht ja auch Zeit.

      Ist deine DB überlastet?


      Kenne Caching funktionen die generieren html und liefern dieses dann aus.
      mfg
      marc75

      <Platz für anderes>

      Kommentar


      • #4
        dann kann der verarbeitungsteil von $datensatz innerhalb der schleife doch genau der selbe bleiben.
        hm, das problem ist, das ich sowohl als auch resource ID's und fertige arrays übergeben muss.

        bei foreach() gibs dann wohl nen problem wenn ich nen query result als resource ID übergeben will.

        wozu soll das gut sein? denn die txt file schreiben und auslesen braucht ja auch Zeit.
        performance, hier hast du nur nen aufwand von T(1), bei sucher inner DB T(N log N)

        für jede select query im system wird eine cache datei erstellt. mit einem ablaufdatum, gibt zwar auch query caching bei den neuen mysql versionen, aber dies ist effektiver, vorallem wenn man mit 10.000 - 150.000 datensätzen arbeitet.

        Kommentar


        • #5
          Original geschrieben von fanta2k
          hm, das problem ist, das ich sowohl als auch resource ID's und fertige arrays übergeben muss.

          bei foreach() gibs dann wohl nen problem wenn ich nen query result als resource ID übergeben will.
          dann kapselst du das ganze halt in einer funktion, die sowohl arrays als auch ressource-ids entgegen nimmt, dann den typ prüft, und je nachdem entweder eine while- oder eine foreach-schleife macht ...

          oder, noch besser, du kapselst nur den zugriff in eine funktion, die bei einer ressource-id halt mysql_fetch macht, bei einem array den index-zeiger um eins hochsetzt, und wenn res-id oder array am ende angekommen sind, einfach false zurückliefert.

          dann kannst du die wie bisher in einer while-schleife aufrufen ...

          PHP-Code:
          while($datensatz meine_eigene_fetchfunktion($quelle) {
            
          // datensatz verarbeiten;

          wobei $quelle dann nach belieben ein array oder eine ressource-id sein kann.
          Zuletzt geändert von wahsaga; 14.06.2004, 13:56.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            blöde frage, aber

            PHP-Code:
              function walkCachedArray($query) {
                 
            $curr current($query);
                 
            next($query);
                 return 
            $curr;
              } 
            setzt keinen zeiger weiter bei einem aufruf mit

            while ($data = walkCachedArray($query)) {
            ..
            }

            Kommentar


            • #7
              Original geschrieben von fanta2k
              setzt keinen zeiger weiter
              nachdenken!

              in $curr legst du dir den zeiger auf das aktuelle element ab, und $curr gibst du auch zurück ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                current gibt ja das aktuelle element zurück.

                aber mit next() wird der zeiger trotzdem nicht erhöht. egal wie mans dreht.

                nen vorschlag zum pointer weitersetzen ?

                Kommentar


                • #9
                  Original geschrieben von fanta2k
                  current gibt ja das aktuelle element zurück.
                  ja, und genau dieses lässt du dann ja auch von deiner funktion zurückgeben - ohne es vorher noch in irgendeiner weise zu verändern!

                  aber mit next() wird der zeiger trotzdem nicht erhöht. egal wie mans dreht.
                  mutige, und zugleich dumme aussage ... du schaust dir ja nicht mal an, was next() gemacht hat - wie kommst du also zu dieser schlussfolgerung?

                  next() hat einen rückgabewert, doch den lässt du einfach im datennirwana verschwinden.

                  nen vorschlag zum pointer weitersetzen ?
                  ja, next().
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    jo, aber auch ein

                    return next($query);

                    oder der gleichen gibt jeweils nur das erste element in ner endlosschleife zurück.

                    Kommentar


                    • #11
                      dann vielleicht mal call by reference anstatt call by value benutzen, um das array an die funktion zu übergeben.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        seit wann gibs in php call by reverence ?

                        so komm isch auch net weiter, keine genaue idee , oder wis geht ?

                        mfg.

                        Kommentar


                        • #13
                          PHP-Code:
                          function walkCachedArray(&$query) { 
                          man beachte das &
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            oh,

                            eigener cache klappt nun, wer braucht da schon adodb

                            Kommentar


                            • #15
                              btw. das war schon richtig

                              PHP-Code:

                                   $curr 
                              current($query);
                                   
                              next($query);
                                   return 
                              $curr

                              Kommentar

                              Lädt...
                              X