Re: @perl-Profis/Übergangslösung gefunden;-) - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Sonntag, 11.September.2005, 18:44.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      nee, hier läuft nix am range vorbei. Wie soll die Range auf die Anzahl der auszugebenden Elemente des foreach angewandt werden? - das geht nicht über die Range.
      Entweder man bricht die Schleife ab wenn die Anzahl Datensätze des zutreffenden Kriteriums aus der Liste ausgegeben wird, oder man baut sich zur Ausgabe der Liste eine Art eigene Range.
      Du willst doch offenbar von einer Menge gefilteter Datensätze nur eine bestimmte Anzahl ausgeben?
      Warum sollte das nicht so funzen:
      ---schnipp
      get "Id>=0 & Id<=30", "Datenbank";
      while(get_next("Datenbank"))1{
       push(@Id,$Id);
      } # E while_get_next
      $max_zahl_ausgabe = 10
      foreach (@Id){
      $cnt++;
      break if $cnt >= $max_zahl_ausgabe; # wenn 10 erreicht, Schleife abbrechen
      get "Id==$_ range=0,10", "Datenbank";
        
        out"DS Nr. $cnt - plz: $plz<br>";
        } # E while_get_next
      } # E foreach
      
      --- schnapp
      (oder hab ich dein Problem falsch verstanden?)
      Übrigens ist das mit der ID von-bis IMHO keine so gute Idee, weil wenn DS bearbeitet (respektive gelöscht) wurden der Bereich ruck-zuck leer ist oder nur aus ein paar einzelnen DS besteht.
      Kannste selber probieren, mach mal 10 Datensätze,lösche die ersten 9 und dann füge weitere 10 an, und siehe da, es ist nur noch ein Datensatz im Bereich von ID-Nummer 1 - 10 vorhanden (so soll es ja sein, eindeutige ID)

      Mir fehlt zwar bei dieser Verhaltensweise des ID-Feldes die Eineindeutigkeit, aber man kann zur Not damit leben, wenn man ein anderes Feld als pimären eineindeutigen Schlüssel deklariert (oder ggf. u.U. eine LogDB oder bei Lizenz Statusdatei mitführt, die immer die letzte vergebene ID speichert und dann im Falle des Einfügens eines DS die ID auf einen um diesen erhöhten Wert setzt, falls die höchste in der DB befindliche ID kleiner als diese ist.

      Übrigens wäre das einer meiner wenigen Wünsche für eine weiterentwickelte BasePortal-Version, dass dieser Bug des ID-Feldes bereinigt wäre (aber ich weiss ja, das ist ein Feature und kein Bug, weil nicht sein kann, was nicht sein darf ;-) )


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Claus (4645 Beiträge) am Sonntag, 11.September.2005, 11:34.
    @perl-Profis

      Hallo Cracks,

      habe schon den ganzen morgen nach einer Lösung in perl-tuts und selfhtml gesucht, aber noch keine gefunden.

      Problem: ich möchte aufgrund von Daten aus "@Id" entsprechende Datensätze aus einer DB mit get holen. Funktioniert zwar, aber bei meinem Ansatz werden sämtliche Datensätze geholt und ausgegeben.

      Hier mal ein "abstraktes" Beispiel zur Veranschaulichung:

      <perl>
      get "Id>=0 & Id<=30", "Datenbank";
      while(get_next("Datenbank"))
      

      {

       push(@Id,$Id);
      

      }

      foreach (@Id)
      {
      get "Id==$_ range=0,10", "Datenbank";
      out"plz: $plz<br>";
      }
      

      </perl>

      Aufgrund der Schleife logisch, daß alle Datensätze geholt und ausgegeben werden, aber ich habe trotz intensiver Suche keinen Lösungsansatz gefunden.

      Auch wenn die Problematik auf den ersten Blick keinen Sinn ergeben mag, der ist schon vorhanden;-)

      Wäre für einen Denkanstoß dankbar.

      Gruß

      Claus

     Antworten

    Beitrag von H.Fehde (724 Beiträge) am Sonntag, 11.September.2005, 13:04. WWW: bei123.de
    Re: @perl-Profis

      hier mal eine Möglichkeit (..gäbe sicher noch andere)

      <perl>
      get "Id>=0 & Id<=30", "Datenbank",\%mID;
      foreach(@{$mID{Id}})
      {#######################################
      get "Id==$_ range=0,10", "Datenbank";
      out "plz: $plz<br>";
      }#######################################
      </perl>
      

     Antworten

    Beitrag von Claus (4645 Beiträge) am Sonntag, 11.September.2005, 13:17.
    Re: @perl-Profis

      erstmal danke für den Vorschlag, aber

      habe das mal eben probiert, der range bleibt jedoch unberücksichtigt und es werden nach wie vor alle Datensätze ausgegeben.

      Gruß

      Claus

     Antworten

    Beitrag von Claus (4645 Beiträge) am Sonntag, 11.September.2005, 14:04.
    Re: @perl-Profis

      Vielleicht habe ich mich ja auch etwas unglücklich ausgedrückt?;-)

      Beispiel:

      1. Datenbank hat 800 Datensätze
      2. Nur bestimmte Datensätze sollen gefunden werden
      3. Gefundene Datensätze sollen in "@irgendwas" gespeichert werden
      4. Datensätze sollen über den Wert aus "@irgendwas" per get in 10-Schritten ausgegeben werden.

      Bisher werden zwar nur die gefundenen Datensätze ausgegeben, aber eben immer in "einem Rutsch".

      Hoffe, das Prob kommt jetzt deutlicher rüber.

      Gruß

      Claus

      PS: habe mich zwar in den letzten Wochen mit Arrays, Listen usw. befasst, aber einiges erschließt sich mir noch nicht in vollem umfang. Wird wohl auch noch etwas brauchen;-)

     Antworten

    Beitrag von Claus (4645 Beiträge) am Sonntag, 11.September.2005, 15:12.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      Hat sich wohl erstmal erledigt;-)

      Der Teufel steckt da anscheinend im Detail, sprich daß das mit foreach so wohl nicht machbar ist. Habe jetzt eine Lösung mit "for" zusammengebastelt, die jetzt grundlegend, wenn auch etwas aufwändig funktioniert;-))

      Bin allerdings für eine foreach-Variante, so sie es denn gibt, weiterhin offen.

      Gruß

      Claus

     Antworten

    Beitrag von Sander (8133 Beiträge) am Sonntag, 11.September.2005, 15:23.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      zeig mal dein code mit for.
      eigentlich sollte doch der erste funktionieren oder ich weiß nicht recht was du vor hast.

     Antworten

    Beitrag von Claus (4645 Beiträge) am Sonntag, 11.September.2005, 16:29.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      Hallo Sander,

      hier mal ein Testlink mit dem Vorschlag von H. Fehde:

      <perl>
      get "Id>=0 & Id<=30", "Datenbank",\%mID;
      foreach(@{$mID{Id}})
      {#######################################
      get "Id==$_ range=0,10", "Datenbank";
      out "Ort: $Ort<br>";
      }#######################################
      </perl>
      

      http://www.jobmarder.de/cgi-bin/baseportal.pl?htx=/automobilhai/hamburg/testpush1


      Wie Du unschwer erkennen kannst, läuft die foreach-Schleife da genauso am "range" vorbei wie bei meinem eigenen Test mit "push".

      Von der Logik her für mich auch eigentlich klar, denn dadurch wird die Schleife gemäß der Anzahl der Datensätze, die ja einzeln aus dem "@..." geholt werden, durchlaufen und jedesmal per "get" ein Datensatz geholt und ausgegeben.

      Was ich jetzt ansatzweise umsetzte ist eine for-Schleife, die eben aus dem @Id nur eine vorgegebene Anzahl holt und dann der Zähler entsprechend per Link für die nächsten 10 Datensätze verändert wird. Bin da noch am fertigstellen;-)

      Was ich vorhabe, hatte ich hier beschrieben;-))

      http://www.baseportal.de/baseportal/baseportal/forum&wcheck=1&Pos=11866.1

      Gruß

      Claus

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Sonntag, 11.September.2005, 18:44.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      nee, hier läuft nix am range vorbei. Wie soll die Range auf die Anzahl der auszugebenden Elemente des foreach angewandt werden? - das geht nicht über die Range.
      Entweder man bricht die Schleife ab wenn die Anzahl Datensätze des zutreffenden Kriteriums aus der Liste ausgegeben wird, oder man baut sich zur Ausgabe der Liste eine Art eigene Range.
      Du willst doch offenbar von einer Menge gefilteter Datensätze nur eine bestimmte Anzahl ausgeben?
      Warum sollte das nicht so funzen:
      ---schnipp
      get "Id>=0 & Id<=30", "Datenbank";
      while(get_next("Datenbank"))1{
       push(@Id,$Id);
      } # E while_get_next
      $max_zahl_ausgabe = 10
      foreach (@Id){
      $cnt++;
      break if $cnt >= $max_zahl_ausgabe; # wenn 10 erreicht, Schleife abbrechen
      get "Id==$_ range=0,10", "Datenbank";
        
        out"DS Nr. $cnt - plz: $plz<br>";
        } # E while_get_next
      } # E foreach
      
      --- schnapp
      (oder hab ich dein Problem falsch verstanden?)
      Übrigens ist das mit der ID von-bis IMHO keine so gute Idee, weil wenn DS bearbeitet (respektive gelöscht) wurden der Bereich ruck-zuck leer ist oder nur aus ein paar einzelnen DS besteht.
      Kannste selber probieren, mach mal 10 Datensätze,lösche die ersten 9 und dann füge weitere 10 an, und siehe da, es ist nur noch ein Datensatz im Bereich von ID-Nummer 1 - 10 vorhanden (so soll es ja sein, eindeutige ID)

      Mir fehlt zwar bei dieser Verhaltensweise des ID-Feldes die Eineindeutigkeit, aber man kann zur Not damit leben, wenn man ein anderes Feld als pimären eineindeutigen Schlüssel deklariert (oder ggf. u.U. eine LogDB oder bei Lizenz Statusdatei mitführt, die immer die letzte vergebene ID speichert und dann im Falle des Einfügens eines DS die ID auf einen um diesen erhöhten Wert setzt, falls die höchste in der DB befindliche ID kleiner als diese ist.

      Übrigens wäre das einer meiner wenigen Wünsche für eine weiterentwickelte BasePortal-Version, dass dieser Bug des ID-Feldes bereinigt wäre (aber ich weiss ja, das ist ein Feature und kein Bug, weil nicht sein kann, was nicht sein darf ;-) )

     Antworten

    Beitrag von Claus (4645 Beiträge) am Sonntag, 11.September.2005, 19:04.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      Hallo Ruben,

      >Du willst doch offenbar von einer Menge gefilteter Datensätze nur eine bestimmte Anzahl ausgeben?
      

      Genau so ist es;-)

      >Übrigens ist das mit der ID von-bis IMHO keine so gute Idee, weil wenn DS bearbeitet (respektive gelöscht) wurden der Bereich ruck-zuck leer ist oder nur aus ein paar einzelnen DS besteht.
      

      Das war nur ein einfaches Beispiel zur Schilderung. Die Abfrage der DB erfolgt natürlich anders;-)

      Dein Vorschlag sieht übrigens sehr gut aus;-))

      Bin das Prob bisher anders angegangen:

      ----schnipp

      for ( $i = $a; $i <= $b; $i++) 
      {
      get "Id==$Id[$i]", "Datenbank";
      out "nr; $i, Ort: $Ort<br>";
      }
      

      ----schnapp

      und dann entsprechend prüfen in verbindung mit anzahl_elemente und dann per link entsprechend erhöhen bzw. beim back senken.

      Wollte gerade abschalten (schon seit heute früh 5.00 Uhr) am werkeln. Langsam wird die Familie gnadderich;-))

      Werde mich in den nächsten Tagen mal melden.

      THX

      Gruß

      Claus

     Antworten

    Beitrag von Claus (4645 Beiträge) am Montag, 12.September.2005, 11:57.
    Re: @perl-Profis/Übergangslösung gefunden;-)

      Hallo Ruben,

      bin gerade dabei, Deinen Vorschlag zu modifizieren;-)

      Grundgerüst läßt sich aber sehr gut für den weiteren "Verlauf" anpassen;-))

      Bevor ich hier zum "Schleifenkönig" werde, noch eine Nachfrage.

      Kann ja mal sein, daß weniger Datensätze gefunden werden, als bei max_anzahl_ausgabe definiert wurden.

      <perl>
      
      -----schnipp

      break if $cnt >= $max_zahl_ausgabe || $cnt >= $anzahl_elemente; # wenn 10 erreicht, Schleife abbrechen oder wenn weniger Datensätze im @Id als max_zahl_ausgabe vorhandenen sind

      ----schnapp

      </perl>
      

      Sehe ich das so richtig, oder brauche ich die zweite Bedingung nicht?

      Gruß

      Claus

     Antworten

    Beitrag von Claus (4645 Beiträge) am Montag, 12.September.2005, 14:54.
    Re: @perl-Profis/erledigt;-)

      Hallo Ruben, und alle, die bereits herzhaft gelacht haben;-))

      bin gerade wieder "aufgewacht" und habe festgestellt, daß diese Frage ziemlich blöd war;-)

      Wie heißt es so schön:
      Ein Tag, an dem man nicht gelacht hat, ist ein verlorener Tag;-)

      In diesem Sinne

      Gruß

      Claus

     Antworten

    Beitrag von Claus (4645 Beiträge) am Montag, 12.September.2005, 16:12.
    Re: @perl-Profis/erledigt;-)

     Antworten


     
 Liste der ersten 150 Einträge:Einklappen Zur Eingabe 
 Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.10s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!