Re: Datenabfrage funktioniert nicht so wie ich möchte! - 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 Dirst (13 Beiträge) am Mittwoch, 11.Februar.2004, 21:40.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Ich habe mich nun selber wieder daran gesetzt. Nur das mit dem Sortieren nach Schnitt....keine Chance.


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Dirst (13 Beiträge) am Dienstag, 10.Februar.2004, 23:53.
    Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo,
      Ich sitze nun schon solange an dieser Datenbank, daß ich vor lauter Bäume den Wald nicht mehr sehe.Schaut Euch mal die Liste an:
      http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/Dirst/Linkliste

      Hier seht Ihr, daß die Anzahl der Runden mit den Eintragungen in den Zeilen nicht immer übereinstimmen. Ich weiß einfach nicht warum. Hier brauchte ich mal Hilfe. Es sollte nachher so sein das die richtige Anzahl der Runden angezeigt wird und alles nach dem Schnitt, der höchste zuerst, sortiert wird.Für Hilfe wäre ich sehr dankbar
      Gruß Dirk

      Hier der erste Teil der Liste:

      <html>
      <head>
      <title>Fern-Rundenwettkampf 2004</title>
      </head>
      <body BACKGROUND="http://www.Dohlenrott.de/aHinterscheibe.gif" >
      <body bgcolor=#ffffff>
      <p>
        <br>
        <font face="Arial, Arial, Helvetica" size="6" color="#800000">Fern-Rundenwettkämpfe 2004</font> 
      <br>
      <font face="Arial, Arial, Helvetica" size="3" color="#800000">von Januar bis Dezember.</font> <td <br>
      <br><font face="Arial" color="#800000" size="3">
      <text align="center">
      <center>
       </center> 
      <div align="center"><br>
        <font face="Arial, Helvetica, sans-serif" size="2" color="#800000">[<a href="#1">Luftgewehr</a>] [<a href="#2">Luftpistole</a>] [<a href="#3">Sportpistole</a>]  [<a href="http://baseportal.de/cgi-bin/baseportal.pl?htx=/main&uid=Dirst&db=Linkliste&cmd=do_add">
      Nur für Admin</a>]
      <br>
        <br> 
      </div>
      <h2><font face="Arial, Helvetica, sans-serif" color="#800000"><i><a name="2"></a>Luftgewehr<br>  
        </i></font></h2>
      <center>
        <table width="95%" border="0" cellspacing="0" cellpadding="0" align="center">
       
        <tr bgcolor="#000000"> 
          <td>
            <table border="0" cellpadding="4" cellspacing="1" width=100%>
        <tr bgcolor="#800000">
          <td width="10%"><font face="Arial" color="#FBE3AD"><b>Name</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Jan.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Feb.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>März</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>April</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Mai</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Juni</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Juli</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Aug.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Sept.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Okt.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Nov.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Dez.</b></font></td>
          <td width="6%"><font face="Arial" color="#C0C0C0"><b>Runden</b></font></td>
          <td width="6%"><font face="Arial" color="#C0C0C0"><b><center>Schnitt</center></b></font></td>
          <td width="6%"><font face="Arial" color="#C0C0C0"><b>Gesamt</b></font></td>
        </tr>
      

      <loop Bereich~=Luftgewehr sort^=-Schnitt range^=0,100 code=perl>
      $Gesamt=$Jan+$Feb+$Marz+$April+$Mai+$Juni+$Juli+$Aug+$Sep+$Okt+$Nov+$Dez;
      $bSj=($Jan /$Jan) if ($Jan > 0);
      $bSf=($Feb /$Feb) if ($Feb > 0);
      $bSm=($Marz /$Marz) if ($Marz > 0);
      $bSa=($April /$April) if ($April > 0);
      $bSma=($Mai /$Mai) if ($Mai > 0);
      $bSji=($Juni /$Juni) if ($Juni > 0);
      $bSju=($Juli /$Juli) if ($Juli > 0);
      $bSau=($Aug /$Aug) if ($Aug > 0);
      $bSs=($Sep /$Sep) if ($Sep > 0);
      $bSo=($Okt /$Okt) if ($Okt > 0);
      $bSn=($Nov /$Nov) if ($Nov > 0);
      $bSd=($Dez /$Dez) if ($Dez > 0);
      $Schnitt= ($Gesamt/($bSj + $bSf + $bSm + $bSa + $bSma + $bSji + $bSju + $bSau + $bSs + $bSo + $bSn + $bSd));
      $Schnitt= sprintf('%.02f',$Schnitt);
      $Runden=$bSj+$bSf+$bSm+$bSa+$bSma+$bSji+$bSju+$bSau+$bSs+$bSo+$bSn+$bSd;
      out <<EOF;
      

      <center>
        <tr bgcolor="#FBE3AD">
           <td width="10%"><font face="Arial" size="4" color="#000000">$Name</td>
          <td width="6%">$Jan</td>
          <td width="6%">$Feb</td>
          <td width="6%">$Marz</td>
          <td width="6%">$April</td>
          <td width="6%">$Mai</td>
          <td width="6%">$Juni</td>
          <td width="6%">$Juli</td>
          <td width="6%">$Aug</td>
          <td width="6%">$Sep</td>
          <td width="6%">$Okt</td>
          <td width="6%">$Nov</td>
          <td width="6%">$Dez</td>
          <td width="6%"> <font face="Arial" size="4" color="#800000"><center>$Runden</center></td>
          <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Schnitt</center></td>
          <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Gesamt</center></td>    
      </center>
        </tr>
      EOF</loop>
      </table>
      </td>
        </tr>
      </table>
      <br>
      </center>
      <h2><font face="Arial, Helvetica, sans-serif" color="#800000"><i><a name="2"></a>Luftpistole<br>  
        </i></font></h2>
      
        <table width="95%" border="0" cellspacing="0" cellpadding="0" align="center">
       
        <tr bgcolor="#000000"> 
          <td>
            <table border="0" cellpadding="4" cellspacing="1" width=100%>
        <tr bgcolor="#800000">
          <td width="10%"><font face="Arial" color="#FBE3AD"><b>Name</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Jan.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Feb.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>März</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>April</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Mai</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Juni</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Juli</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Aug.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Sept.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Okt.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Nov.</b></font></td>
          <td width="6%"><font face="Arial" color="#FBE3AD"><b>Dez.</b></font></td>
          <td width="6%"><font face="Arial" color="#C0C0C0"><b>Runden</b></font></td>
          <td width="6%"><font face="Arial" color="#C0C0C0"><b><center>Schnitt</center></b></font></td>
          <td width="6%"><font face="Arial" color="#C0C0C0"><b>Gesamt</b></font></td>
        </tr>
      

      <loop Bereich~=Luftpistole sort^=-Schnitt range^=0,100 code=perl>
      $Gesamt=$Jan+$Feb+$Marz+$April+$Mai+$Juni+$Juli+$Aug+$Sep+$Okt+$Nov+$Dez;
      $bSj=($Jan /$Jan) if ($Jan > 0);
      $bSf=($Feb /$Feb) if ($Feb > 0);
      $bSm=($Marz /$Marz) if ($Marz > 0);
      $bSa=($April /$April) if ($April > 0);
      $bSma=($Mai /$Mai) if ($Mai > 0);
      $bSji=($Juni /$Juni) if ($Juni > 0);
      $bSju=($Juli /$Juli) if ($Juli > 0);
      $bSau=($Aug /$Aug) if ($Aug > 0);
      $bSs=($Sep /$Sep) if ($Sep > 0);
      $bSo=($Okt /$Okt) if ($Okt > 0);
      $bSn=($Nov /$Nov) if ($Nov > 0);
      $bSd=($Dez /$Dez) if ($Dez > 0);
      $Schnitt= ($Gesamt/($bSj + $bSf + $bSm + $bSa + $bSma + $bSji + $bSju + $bSau + $bSs + $bSo + $bSn + $bSd));
      $Schnitt= sprintf('%.02f',$Schnitt);
      $Runden=$bSj+$bSf+$bSm+$bSa+$bSma+$bSji+$bSju+$bSau+$bSs+$bSo+$bSn+$bSd;
      out <<EOF;
      

      <center>
        <tr bgcolor="#FBE3AD">
           <td width="10%"><font face="Arial" size="4" color="#000000">$Name</td>
          <td width="6%">$Jan</td>
          <td width="6%">$Feb</td>
          <td width="6%">$Marz</td>
          <td width="6%">$April</td>
          <td width="6%">$Mai</td>
          <td width="6%">$Juni</td>
          <td width="6%">$Juli</td>
          <td width="6%">$Aug</td>
          <td width="6%">$Sep</td>
          <td width="6%">$Okt</td>
          <td width="6%">$Nov</td>
          <td width="6%">$Dez</td>
          <td width="6%"> <font face="Arial" size="4" color="#800000"><center>$Runden</center></td>
          <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Schnitt</center></td>
          <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Gesamt</center></td>    
      </center>
        </tr>
      EOF</loop>
      </table>
      </td>
        </tr>
      </table>
      <br>
      </center>
      

      </font>
      </body>
      </html>
      

     Antworten

    Beitrag von Dirst (13 Beiträge) am Mittwoch, 11.Februar.2004, 21:40.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Ich habe mich nun selber wieder daran gesetzt. Nur das mit dem Sortieren nach Schnitt....keine Chance.

     Antworten

    Beitrag von Dirst (13 Beiträge) am Donnerstag, 12.Februar.2004, 11:42.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Das Problem sehe ich darin, das das Feld Schnitt errechnet wird. Wahrscheinlich kann das System nicht gleichzeitig sortieren. Also muß ja erst der loop durchlaufen und dann das Ganze sortiert und ausgeben werden. Aber wie macht man das?

     Antworten

    Beitrag von Sascha Fitzner (476 Beiträge) am Donnerstag, 12.Februar.2004, 15:39. WWW: planet-gaga.de
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo Dirst....

      ich schlage da mal folgenden Lösungsweg vor...

      1.) von mir aus mit loop deine datensätze durchlaufen....
      2.) dabei deinen schnitt errechnen...
      3.) das errechnete dann mittels put in eine sortiertabelle schieben...
      4.) bei der tabelle ist dann der errechnete schnitt ein index ....
      5.) weiter bei punkt 1, solange bis keine schnitte mehr zu errechnen sind

      dann weiter...

      1.) mit loop die tabelle sortiertabelle durchlaufen...
      2.) hierbei über den index schnitt lesen...
      3.) deine daten verarbeiten so wie du es willst...
      4.) weiter bei punkt 1m solange bis keine datensätze mehr zu verarbeiten sind.

      Logik ist denke ich soweit klar, musste nur noch in perl umsetzen.

      Gruss nach Schwalenberg

      Sascha Fitzner

     Antworten

    Beitrag von Dirst (13 Beiträge) am Donnerstag, 12.Februar.2004, 16:40.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo Sascha,
      danke für die Grüße...werde sie ausrichten!

      Deine Lösung ist gut, nur mit der Umsetzung in perl gibt es ein Problem.
      Ich weiß nicht wie.


      <loop Bereich~=Luftgewehr sort^=-Schnitt range^=0,100 code=perl>
      

      $Gesamt=0;
      $Gesamt=$Jan+$Feb+$Marz+$April+$Mai+$Juni+$Juli+$Aug+$Sep+$Okt+$Nov+$Dez;
      $aSj=0;
      $aSf=0;
      $aSm=0;
      $aSa=0;
      $aSma=0;
      $aSji=0;
      $aSju=0;
      $aSau=0;
      $aSs=0;
      $aSo=0;
      $aSn=0;
      $aSd=0;
      $Schnitt=0;
       
      $aSj=($Jan /$Jan) if ($Jan > 0); 
      $aSf=($Feb /$Feb) if ($Feb > 0);
      $aSm=($Marz /$Marz) if ($Marz > 0);
      $aSa=($April /$April) if ($April > 0);
      $aSma=($Mai /$Mai) if ($Mai > 0);
      $aSji=($Juni /$Juni) if ($Juni > 0);
      $aSju=($Juli /$Juli) if ($Juli > 0);
      $aSau=($Aug /$Aug) if ($Aug > 0);
      $aSs=($Sep /$Sep) if ($Sep > 0);
      $aSo=($Okt /$Okt) if ($Okt > 0);
      $aSn=($Nov /$Nov) if ($Nov > 0);
      $aSd=($Dez /$Dez) if ($Dez > 0);
      $Runden=$aSj+$aSf+$aSm+$aSa+$aSma+$aSji+$aSju+$aSau+$aSs+$aSo+$aSn+$aSd;
      $Schnitt=$Gesamt/$Runden;
      $Schnitt= sprintf('%.02f',$Schnitt);
      

      out <<EOF;
       


      Hier müßte nun Schluß sein und die Daten in eine Tabelle geschoben werden.
      Um dann einen neuen Loop anzufangen der alles nach Schnitt sortiert und ausgibt. Aber wie?





      <center>
      <tr bgcolor="#FBE3AD">
      <td width="10%"><font face="Arial" size="4" color="#000000">$Name</td>
      <td width="6%">$Jan</td>
      <td width="6%">$Feb</td>
      <td width="6%">$Marz</td>
      <td width="6%">$April</td>
      <td width="6%">$Mai</td>
      <td width="6%">$Juni</td>
      <td width="6%">$Juli</td>
      <td width="6%">$Aug</td>
      <td width="6%">$Sep</td>
      <td width="6%">$Okt</td>
      <td width="6%">$Nov</td>
      <td width="6%">$Dez</td>
      <td width="6%"> <font face="Arial" size="4" color="#800000"><center>$Runden</center></td>
      <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Schnitt</center></td>
      <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Gesamt</center></td> 
      </center>
      </tr>
      

     Antworten

    Beitrag von Dirst (13 Beiträge) am Freitag, 13.Februar.2004, 19:25.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Ich komme einfach nicht weiter.

      Kann mir nicht Jemand etwas helfen?

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Freitag, 13.Februar.2004, 20:40.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo, Dirst,
      nagut - überredet, ich versuchs mal.
      - das "Feld" Schnitt, wie du es nennst, gibt es ja nicht in der Datenbank, das muss ja aus den einzelnen Werten errechnet werden - also kannst du es im Loop nicht zum sortieren nehmen. Im Loop werden ja nur Datensaätze nach tatsächlich vorhandenen Feldern mit vorhandenen Werten sortiert...

      - effektiv wäre m.E. nach wenn es nicht zu viele Datensätze werden (also hier Namen) die kompletten Tabellenzeilen in einen Hash zu schreiben und den dann sortiert auszugeben - wobei als Key der Schnitt rein müsste und als Value die Tabellenzeile mit allem komplett.
      Hier mal bissel schnell gehackter Quelltext zum "Nachdenken" - not yet tested aber als Denkanstoss zu verstehen:
      ----schnipp
      <perl>
      # zunächst eine Liste mit den Werten für Bereich bauen und dann die Datenbank
      # für jeden dieser Werte durchgehen (äußere foreach-Schleife
      foreach $lwert("Luftgewehr", "Luftpistole", "Sportpistole"){
      get "Bereich~=$lwert range=$ra,$ra_l", "datenbank";
      out<<EOF;
      <!-- Einzeltabelle für jeden Bereich ($Bereich) -->
      <table border="0" cellpadding="4" cellspacing="1" width=100%>
      <tr>
      <td colspan=15 align=left><h2><font face="Arial, Helvetica, sans-serif" color="#800000"><i><a name="2"></a>$lwert<br></i></font></h2></td>
      </tr>
      <tr bgcolor="#800000">
      <td width="10%"><font face="Arial" color="#FBE3AD"><b>Name</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Jan.</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Feb.</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>März</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>April</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Mai</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Juni</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Juli</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Aug.</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Sept.</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Okt.</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Nov.</b></font></td>
      <td width="6%"><font face="Arial" color="#FBE3AD"><b>Dez.</b></font></td>
      <td width="6%"><font face="Arial" color="#C0C0C0"><b>Runden</b></font></td>
      <td width="6%"><font face="Arial" color="#C0C0C0"><b><center>Schnitt</center></b></font></td>
      <td width="6%"><font face="Arial" color="#C0C0C0"><b>Gesamt</b></font></td>
      </tr>
      EOF
      while (get_next("datenbank"){
       #. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .#
       # Berechnungen vornehmen
       $Gesamt=$Jan+$Feb+$Marz+$April+$Mai+$Juni+$Juli+$Aug+$Sep+$Okt+$Nov+$Dez;
       $bSj=($Jan /$Jan) if ($Jan > 0);
       $bSf=($Feb /$Feb) if ($Feb > 0);
       $bSm=($Marz /$Marz) if ($Marz > 0);
       $bSa=($April /$April) if ($April > 0);
       $bSma=($Mai /$Mai) if ($Mai > 0);
       $bSji=($Juni /$Juni) if ($Juni > 0);
       $bSju=($Juli /$Juli) if ($Juli > 0);
       $bSau=($Aug /$Aug) if ($Aug > 0);
       $bSs=($Sep /$Sep) if ($Sep > 0);
       $bSo=($Okt /$Okt) if ($Okt > 0);
       $bSn=($Nov /$Nov) if ($Nov > 0);
       $bSd=($Dez /$Dez) if ($Dez > 0);
       $Schnitt= ($Gesamt/($bSj + $bSf + $bSm + $bSa + $bSma + $bSji + $bSju + $bSau + $bSs + $bSo + $bSn + $bSd));
       $Schnitt= sprintf('%.02f',$Schnitt);
       $Runden=$bSj+$bSf+$bSm+$bSa+$bSma+$bSji+$bSju+$bSau+$bSs+$bSo+$bSn+$bSd;
       # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
       # Berechnete Werte in Hash schreiben - Key/Valuepaar Schnitt/Tabellenzeile
       %h_tz_ausgabe = (
              "$Schnitt" => <<EOF
       <tr bgcolor="#FBE3AD">
       <td width="10%"><font face="Arial" size="4" color="#000000">$Name</td>
       <td width="6%">$Jan</td>
       <td width="6%">$Feb</td>
       <td width="6%">$Marz</td>
       <td width="6%">$April</td>
       <td width="6%">$Mai</td>
       <td width="6%">$Juni</td>
       <td width="6%">$Juli</td>
       <td width="6%">$Aug</td>
       <td width="6%">$Sep</td>
       <td width="6%">$Okt</td>
       <td width="6%">$Nov</td>
       <td width="6%">$Dez</td>
       <td width="6%"> <font face="Arial" size="4" color="#800000"><center>$Runden</center></td>
       <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Schnitt</center></td>
       <td width="6%"><font face="Arial" size="4" color="#800000"><center>$Gesamt</center></td>
       </tr>
      EOF
       ); # E hash mit Key Schnitt aktueller Datensatz
      } # E while get next
      # Tabellenzeilen für aktuellen Bereich sortiert nach Schnitt ausgeben
      foreach $tz (sort keys %h_tz_ausgabe){
      out "$h_tz_ausgabe{$tz}";
      }
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
      # und nun noch die Tabelle zumachen, damit das Layout auch stimmt
      out "</table>";
      } # E foreach Bereich
      </perl>
      
      ----schnapp
      Axo - hier ist mal eben noch ein Link zu ner absolut tollen Perl-Dokumentation/Anleitung in Deutsch - find ich absolut klasse!
      http://www.perlboard.de/perlguide/Inhalt.html

     Antworten

    Beitrag von Dirst (13 Beiträge) am Freitag, 13.Februar.2004, 21:10.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Donnerwetter!

      Erst mal danke für die Hilfe! Aber ehrlich gesagt verstehe ich nur Bahnhof!!
      Sorry aber ich weiß nicht wie ich anfangen soll!

     Antworten

    Beitrag von Friesecke (245 Beiträge) am Samstag, 14.Februar.2004, 06:52.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo Dirst,

      Schritt 1:

      stell Deine Berechnungen mal wie folgt um :

      $Runden = ...   nach oben direkt unter die Berechnung $Gesamt = ...
      

      Dann wird die Summe Deiner Runden richtig berechnet.

      Für Unterstützung bei weiteren Schritten schicke eine mail mit Bezug
      auf baseportal, da ich nur sehr selten im Forum bin.

      Gruß
      Friesecke

     Antworten

    Beitrag von Friesecke (245 Beiträge) am Samstag, 14.Februar.2004, 09:05.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo Dirk,

      sorry, das war nix. Vergiß es.
      Deine Runden sind doch richtig ?

      Geht es nur um die Sortierung nach Schnitt ?

      Gruß
      Friesecke

     Antworten

    Beitrag von Dirst (13 Beiträge) am Samstag, 14.Februar.2004, 12:18.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Ja, das mit den Runden habe ich nun hinbekommen aber das mit dem Sortieren nach Schnitt klappt nicht.

     Antworten

    Beitrag von Friesecke (245 Beiträge) am Sonntag, 15.Februar.2004, 05:33.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo Dirst,

      Sortieren nach Schnitt :

      ich würde die Datenbank 2 x durchlaufen :

      <loop code=perl sort=irgendwas>
      
      Berechnungen, u.a. Schnitt
      </loop>

      <loop code=perl sort=schnitt>
      
      Ausgabe
      </loop>

      Gruß
      Friesecke

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Samstag, 14.Februar.2004, 14:51.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Na - dann erklär ich dir das ganze mal - in der Hoffnung, dass es auch anderen was zum Verständnis nützt.
      Zu den Konventionen:
      - Alle Zeilen, die mit # im Perl-Block beginnen sind Kommentare - ich kommentiere mal nach den Befehlen/Aneweisungen
      - HTML-Ausgaben erspar ich mir - die hast du ohnehin im Griff und du weisst, was du tust ;-)
      - Das Template ist so aufgebaut, dass es (normalerweise) anstatt deines Templates eingesetzt werden kann (nagut, html-Kopf und Fuss fehlen noch, aber das kriegst du ja eh hin....)
      - anstatt des Wortes "datenbank" musst du den tasächlichen Namen der betreffenden DB einfügen
      ----schnipp
      ....
      <perl>
      # zunächst eine Liste mit den Werten für Bereiche bauen und dann die Datenbank
      # für jeden dieser Werte durchgehen (äußere foreach-Schleife - wenn das Feld Bereich ein Optionfeld ist, kann man alle Werte aus diesem auch dynamisch generieren, hier mal der Script-Block dafür:
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
      get "Field==Bereich","datenbank.fields", "lbereich"; # Optionfeld abc_skgruppe
      my @l_breiche = split/\n/,$Params; #Optionwerte in Liste
      $l_bereiche[0] = substr $l_bereiche[0], rindex ($l_breieche[0], '#') + 1; # Beschreibung vom erstem Listenelement entfernen (ist durch das letzte _#_ bei jedem Feld getrennt, deshalb rindex)
      # die Werte des Optionfeldes der DB stehen jetzt in der Liste(Array) @l_bereiche
      #zur Weiterverarbeitung bereit - ohne störende andere Sachen
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
      foreach $lwert("Luftgewehr", "Luftpistole", "Sportpistole"){
      # anstatt vorstehender Zeile, wenn Bereich ein Optionfeld ist, folgende Zeile nehmen:
      # foreach $lwert(@l_bereiche){
      # für jeden Wert aus der Liste (in den Klammern, "normalerweise" wird hier eine Liste eingesetzt
      # siehe auch alternativ angegebene Programmzeile) kopiere den Listenwert in die Variable $lwert
      get "Bereich~=$lwert range=$ra,$ra_l", "datenbank";
      # hole die Datensätze in denen Bereich mit dem gerade abgearbeiteten Listenwert beginnt
      out<<EOF;
      <!-- Einzeltabelle für jeden Bereich ($Bereich) -->
      EOF
      # bei jedem neuen Schleifendurchlauf eine neue Tabelle für den Bereich ausgeben, bevor die Einzeldatensätze, die den Kriterien aus dem get... entsprechen, geholt werden auch noch den zugehärigen Tabellenkopf (genauso wie im loop bzw. vorm loop)
       while (get_next("datenbank"){
        # solange Datensätze mit den Bedingugen aus dem get oben vorhanden sind
        # (ist genauso wie im loop) Berechnungen vornehmen
        ......dein Berechnungsblock hier drin
        # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
       %h_tz_ausgabe = (
               "$Schnitt" => <<EOF
       <!-- Tabellenzeile für den gerade aktuellen Datensatz -->
      EOF
       ); # E hash mit Key Schnitt aktueller Datensatz
      

      # Ein Hash ist eine Art "minidatenbank" aus den zwei "Feldern" Name(Key) und Wert(Value)
      # in unserem Falle ist der Name (richtiger Key) der errechnete Schnitt
      # und der dazugehörige Wert (richtiger Value) die Tabellenzeile mit den Datensatzinhalten
      # Hashs weist man (u.a.) in der Syntax %hash = ("key1" => "value1", "key2" => "value2") Werte zu
      # hier wurde aus effizienzgründen und der Übersichtlichkeit halber halt einfach die Perl-Eigenart mit dem <<EOF genutzt - das nennt man auch Hier-Dokumente.
      } # E while_get_next
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
       foreach $tz (sort keys %h_tz_ausgabe){
          # nun für jedes Key-Wertpaar im Hash den Schlüsselwert in $tz kopieren, aber vorher nach
          # den Schlüsselwerten sortieren (die ja in unserem Beispiel die Schnitte enthalten), und
          # den zum Schlüssel gehörigen Wert ausgeben (den Schlüssel brauchen wir ja nicht mehr, der
          # wurde ja auch mit in den Wert geschrieben in die Tabellenzelle in die Spalte für
          # den Schnitt
       out "$h_tz_ausgabe{$tz}";
       }
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
      # und nun noch die Tabelle zumachen, damit das Layout auch stimmt
      out "</table>";
      } # E foreach Bereich
      </perl>
      
      ----schnapp
      Das war auch schon alles - das ist eigentlich ein recht triviales Programm.
      Prinzipiell läuft das ganze also in mehreren verschachtelten Schleifen ab:
      - äußere foreach-Schleife für die Menge der Bereiche
       - dann für jeden Bereich die while_get_next-Schleife mit der Menge der Datensätze, bei denen Bereich dem aktueller Wert der äusseren Schleife entspricht, diese Datensätze werden nach dem zu sortierenden und aus den Daten des Datensatzes errechneten Kriterium _Schnitt_  in einen Hash geschrieben.
       Nachdem alle Datensätze entsprechend geholt wurden, wird der Ihnalt des Hashs nach den  Keys sortiert und der zugehörige Wert ausgegeben.
      Wenn das geschehen ist, wird die HTML-Tabelle geschlossen und die äussere foreach-Schleife durchläuft alles mit dem nächsten Listenwert wieder.....
      

      Hoffe, dass ich es einigermassen verständlich erklärt habe und es weiterhilft.
      Ruben

     Antworten

    Beitrag von Dirst (13 Beiträge) am Dienstag, 17.Februar.2004, 13:43.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

     Antworten

    Beitrag von Friesecke (245 Beiträge) am Dienstag, 17.Februar.2004, 18:55.
    Re: Datenabfrage funktioniert nicht so wie ich möchte!

      Hallo Dirst,

      hinter Deiner Überschrift, endend mit Gesamt, fehlt im folgenden perl-code eine "Klammer zu"
      Gruß
      Friesecke

     Antworten


     
 Liste der Einträge von 31950 bis 32100:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < 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.12s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!